Ring Documentation, Release 1.5.2
class program
# Keywords
Accept=0 numbers=0 then=0 print=0 the=0 sum=0
# Execution
func braceexpreval x
value = x
func getnumbers
for x=1 to value
see "Enter Number ("+x+") :" give nNumber
aNumbers + nNumber
next
func getsum
nSUm = 0
for x in aNumbers nSum+= x next
see "The Sum : " + nSum
private
value=0 aNumbers=[]
Output:
Enter Number (1) :3
Enter Number (2) :4
The Sum : 7
for more information see the “Natural Language Programming” chapter.
8.3 Generate/Execute Ring Object Files (*.ringo)
This feature enable you to distribute your applications without distributing the source code. Also it makes application
distribution a simple process where you get one Ring object file for the complete project (many source code files).
Also using Ring object file remove the loading time required for compiling the application.
Check the “command line options” chapter to know more about this feature.
8.4 Syntax Flexibility and different styles for I/O and Control Struc-
tures
Programmers are sensitive to the programming language syntax. Great programmers know how to work using many
different styles but each programmer may have his/her favorite style.
Each programming language comes with a style that you may like or not. Ring is just one of these languages, but as a
response to many programmers asking for a better syntax we decided to provide more options.
Also some of these features are very necessary for Natural Language Programming.
Example :
We have two commands to change language keywords and operators.
ChangeRingOperator + plus
ChangeRingKeyword see print
Print 5 plus 5
8.3. Generate/Execute Ring Object Files (*.ringo) 105
Ring Documentation, Release 1.5.2
ChangeRingOperator plus +
ChangeRingKeyword print see
We have new styles (Optional) for Input/Output.
Example :
Put "What is your name? "
Get cName
Put "Hello " + cName
Example :
Load "stdlib.ring"
Print("What is your name? ") # print message on screen
cName=GetString() # get input from the user
print("Hello #{cName}") # say hello!
We have new styles (optional) for control structures.
Example :
While True
Put "
Main Menu
---------
(1) Say Hello
(2) About
(3) Exit
" Get nOption
Switch nOption
Case 1
Put "Enter your name : "
Get name
Put "Hello " + name + nl
Case 2
Put "Sample : using while loop" + nl
Case 3
Bye
Else
Put "bad option..." + nl
End
End
Example :
Load "stdlib.ring"
While True {
print("
Main Menu
---------
(1) Say Hello
(2) About
(3) Exit
8.4. Syntax Flexibility and different styles for I/O and Control Structures 106
Ring Documentation, Release 1.5.2
")
nOption = GetString()
switch nOption {
case 1
print("Enter your name : ")
name = getstring()
print("Hello #{name}n")
case 2
print("Sample : using switch statementn")
case 3
Bye
else
print("bad option...n")
}
}
Check the next chapters:-
• Getting Started - Second Style
• Getting Started - Third Style
• Control Structures - Second Style - May looks like Lua and Ruby
• Control Structures - Third Style - May looks like C (uses braces)
• Syntax Flexibility
Note: All of these styles are provided automatically by the compiler at the same time, It’s better to select one style for
the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces.
8.5 New Functions and Changes
Changed:
• get() function : changed to sysget()
• sort() function : can now work on list of objects
• find() function : can now work on list of objects
Added:
• clockspersecond()
• CurrentDir()
• ExeFileName()
• ChDir()
• ExeFolder()
• varptr()
• space()
• nullpointer()
8.5. New Functions and Changes 107
Ring Documentation, Release 1.5.2
• object2pointer()
• pointer2object()
Check the next chapters
• System Functions
• Object Oriented Programming (OOP)
• Low Level Functions
8.6 StdLib functions and classes written in Ring
Ring 1.1 comes with a library called StdLib, it’s written in Ring by the help of Ring Team
The library provide a useful group of new functions and classes
Example:
Load "stdlib.ring"
Puts("Test Times()")
Times ( 3 , func { see "Hello, World!" + nl } )
Example:
Load "stdlib.ring"
Puts("Test Map()")
See Map( 1:10, func x { return x*x } )
Example:
Load "stdlib.ring"
Puts("Test Filter()")
See Filter( 1:10 , func x { if x <= 5 return true else return false ok } )
Example:
Load "stdlib.ring"
See "Testing the String Class" + nl
oString = new string("Hello, World!")
oString.println()
oString.upper().println()
oString.lower().println()
oString.left(5).println()
oString.right(6).println()
Example:
Load "stdlib.ring"
oList = new list ( [1,2,3] )
oList.Add(4)
oList.print()
Example:
8.6. StdLib functions and classes written in Ring 108
Ring Documentation, Release 1.5.2
Load "stdlib.ring"
oStack = new Stack
oStack.push(1)
oStack.push(2)
oStack.push(3)
see oStack.pop() + nl
Example:
Load "stdlib.ring"
oQueue = new Queue
oQueue.add(1)
oQueue.add(2)
oQueue.add(3)
see oQueue.remove() + nl
Example:
Load "stdlib.ring"
ohashtable = new hashtable
See "Test the hashtable Class Methods" + nl
ohashtable {
Add("Egypt","Cairo")
Add("KSA","Riyadh")
see self["Egypt"] + nl
see self["KSA"] + nl
see contains("Egypt") + nl
see contains("USA") + nl
see index("KSA") + NL
print()
delete(index("KSA"))
see copy("*",60) + nl
print()
}
Example:
Load "stdlib.ring"
otree = new tree
See "Test the tree Class Methods" + nl
otree {
set("The first step") # set the root node value
see value() + nl
Add("one")
Add("two")
Add("three") {
Add("3.1")
Add("3.2")
Add("3.3")
see children
}
see children
oTree.children[2] {
Add("2.1") Add("2.2") Add("2.3") {
Add("2.3.1") Add("2.3.2") Add("test")
8.6. StdLib functions and classes written in Ring 109
Ring Documentation, Release 1.5.2
}
}
oTree.children[2].children[3].children[3].set("2.3.3")
}
see copy("*",60) + nl
oTree.print()
Check the next chapters:
• StdLib Functions
• StdLib Classes
8.7 RingLibSDL
Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library
Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL
Example:
Load "libsdl.ring"
SDL_Init(SDL_INIT_EVERYTHING)
win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN)
SDL_Delay(2000)
SDL_DestroyWindow(win)
SDL_Quit()
See the RingLibSDL Chapter.
8.8 Demo Project - Game Engine for 2D Games
In practice we would create a game engine in a language like C/C++ to get the best performance then provide Ring
classes to use the engine.
But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases
Also this would be a good demo project to learn about the language concepts where we build things using Object Ori-
ented Programming (OOP) then access the power that we have using declarative programming using nested structures
or using natural programming.
In this project we selected the first way (declarative programming using nested structures)
Example:
Load "gameengine.ring" # Give Control to the Game Engine
func main # Called by the Game Engine
oGame = New Game # Create the Game Object
{
title = "My First Game"
text {
x = 10 y=50
animate = false
size = 20
8.7. RingLibSDL 110
Ring Documentation, Release 1.5.2
file = "fonts/pirulen.ttf"
text = "game development using ring is very fun!"
color = rgb(0,0,0) # Color = black
}
text {
x = 10 y=150
# Animation Part ======================================
animate = true # Use Animation
direction = GE_DIRECTION_INCVERTICAL # Increase y
point = 400 # Continue until y=400
nStep = 3 # Each time y+= 3
#======================================================
size = 20
file = "fonts/pirulen.ttf"
text = "welcome to the real world!"
color = rgb(0,0,255) # Color = Blue
}
Sound { # Play Sound
file = "sound/music1.wav" # Sound File Name
}
} # Start the Events Loop
See the “Demo Project - Game Engine for 2D Games” chapter.
8.9 RingSQLite
Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL.
Now Ring 1.1 provide native support for SQLite database too.
Example:
oSQLite = sqlite_init()
sqlite_open(oSQLite,"mytest.db")
sql = "CREATE TABLE COMPANY(" +
"ID INT PRIMARY KEY NOT NULL," +
"NAME TEXT NOT NULL," +
"AGE INT NOT NULL," +
"ADDRESS CHAR(50)," +
"SALARY REAL );"
sqlite_execute(oSQLite,sql)
sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " +
"VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); " +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" +
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" +
"VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );"
sqlite_execute(oSQLite,sql)
aResult = sqlite_execute(oSQLite,"select * from COMPANY")
8.9. RingSQLite 111
Ring Documentation, Release 1.5.2
for x in aResult
for t in x
see t[2] + nl
next
next
see copy("*",50) + nl
for x in aResult
see x["name"] + nl
next
sqlite_close(oSQLite)
8.10 Better Code Generator for Extensions
We are using the code generator (written in Ring) every day to add new libraries to Ring.
The generator is used to create RingQt and RingAllegro
Also in Ring 1.1 it’s used to create RingLibSDL.
more features are added like
• Set/Get structure members (numbers & pointers)
• Using constants
• Better Generated Code
See the Code Generator chapter.
8.11 Using Self.Attribute in the Class Region to define new attributes
We can use Self.Attribute in the Class Region (after the class name and before any methods) to define new attributes.
class Person
name # Define name as attribute if it's not a global variable
address
phone
class person2
self.name # Must Define the attribute
self.address
self.phone
8.12 Using This.Attribute in nested Braces inside the Class Methods
We can use nested braces {} while we are inside methods to access another objects, In this case the current object
scope will be changed while we are inside the brace and Self will point to the object that we access using braces {}. In
this case we can use This.Attribute and This.Method() to access the object that will be created from the current class.
Check the Object Oriented Programming chapter for more information.
Also Check the Weight History Application in GUI Development using RingQt chapter.
8.10. Better Code Generator for Extensions 112
Ring Documentation, Release 1.5.2
8.13 Better Documentation
Ring 1.1 documentation (800 pages) is better than Ring 1.0 documentation (340 pages)
Many chapters are added for providing better information about the language like
• Language Reference
• Scope Rules
• FAQ
And more!
8.13. Better Documentation 113
CHAPTER
NINE
BUILDING FROM SOURCE CODE
The Ring programming language is a free open source product (MIT License).
You can build Ring using CMake or using Scripts (Batch Files or Shell Scripts).
The next steps explains building using scripts.
9.1 Building using Microsoft Windows
Get the source code
git clone http://github.com/ring-lang/ring.git
Build Ring (Compiler/VM)
cd ring/src
buildvc.bat
buildvcw.bat
Build RingODBC
cd ../extensions/ringodbc
buildvc.bat
Build RingMySQL
cd ../extensions/ringmysql
buildvc.bat
Build RingSQLite
cd ../extensions/ringsqlite
buildvc.bat
Build RingOpenSSL
cd ../extensions/ringopenssl
buildvc.bat
Build RingInternet
cd ../extensions/ringinternet
buildvc.bat
Generate RingAllegro Source Code and Build
114

More Related Content

PDF
The Ring programming language version 1.5 book - Part 3 of 31
PDF
The Ring programming language version 1.10 book - Part 22 of 212
PDF
The Ring programming language version 1.5.3 book - Part 15 of 184
PDF
The Ring programming language version 1.8 book - Part 19 of 202
PDF
The Ring programming language version 1.9 book - Part 21 of 210
PDF
The Ring programming language version 1.2 book - Part 19 of 84
PDF
The Ring programming language version 1.10 book - Part 50 of 212
PDF
The Ring programming language version 1.3 book - Part 7 of 88
The Ring programming language version 1.5 book - Part 3 of 31
The Ring programming language version 1.10 book - Part 22 of 212
The Ring programming language version 1.5.3 book - Part 15 of 184
The Ring programming language version 1.8 book - Part 19 of 202
The Ring programming language version 1.9 book - Part 21 of 210
The Ring programming language version 1.2 book - Part 19 of 84
The Ring programming language version 1.10 book - Part 50 of 212
The Ring programming language version 1.3 book - Part 7 of 88

What's hot (20)

PDF
The Ring programming language version 1.6 book - Part 46 of 189
PDF
The Ring programming language version 1.9 book - Part 53 of 210
PDF
The Ring programming language version 1.5.4 book - Part 40 of 185
PDF
The Ring programming language version 1.4.1 book - Part 12 of 31
PDF
The Ring programming language version 1.9 book - Part 99 of 210
PDF
The Ring programming language version 1.8 book - Part 46 of 202
PDF
The Ring programming language version 1.8 book - Part 30 of 202
PDF
The Ring programming language version 1.6 book - Part 27 of 189
PDF
The Ring programming language version 1.5.3 book - Part 40 of 184
PDF
The Ring programming language version 1.5.1 book - Part 34 of 180
PDF
The Ring programming language version 1.7 book - Part 44 of 196
PDF
The Ring programming language version 1.5.4 book - Part 44 of 185
PDF
The Ring programming language version 1.8 book - Part 74 of 202
PDF
Using Scala Slick at FortyTwo
PDF
The Ring programming language version 1.4 book - Part 12 of 30
PDF
The Ring programming language version 1.5.2 book - Part 39 of 181
ODP
Patterns for slick database applications
PDF
The Ring programming language version 1.5.3 book - Part 25 of 184
PDF
The Ring programming language version 1.9 book - Part 32 of 210
PDF
Realm to Json & Royal
The Ring programming language version 1.6 book - Part 46 of 189
The Ring programming language version 1.9 book - Part 53 of 210
The Ring programming language version 1.5.4 book - Part 40 of 185
The Ring programming language version 1.4.1 book - Part 12 of 31
The Ring programming language version 1.9 book - Part 99 of 210
The Ring programming language version 1.8 book - Part 46 of 202
The Ring programming language version 1.8 book - Part 30 of 202
The Ring programming language version 1.6 book - Part 27 of 189
The Ring programming language version 1.5.3 book - Part 40 of 184
The Ring programming language version 1.5.1 book - Part 34 of 180
The Ring programming language version 1.7 book - Part 44 of 196
The Ring programming language version 1.5.4 book - Part 44 of 185
The Ring programming language version 1.8 book - Part 74 of 202
Using Scala Slick at FortyTwo
The Ring programming language version 1.4 book - Part 12 of 30
The Ring programming language version 1.5.2 book - Part 39 of 181
Patterns for slick database applications
The Ring programming language version 1.5.3 book - Part 25 of 184
The Ring programming language version 1.9 book - Part 32 of 210
Realm to Json & Royal

Similar to The Ring programming language version 1.5.2 book - Part 14 of 181 (20)

PDF
The Ring programming language version 1.3 book - Part 83 of 88
PDF
The Ring programming language version 1.5.1 book - Part 13 of 180
PDF
The Ring programming language version 1.5.4 book - Part 15 of 185
PDF
The Ring programming language version 1.5.3 book - Part 85 of 184
PDF
The Ring programming language version 1.6 book - Part 16 of 189
PDF
The Ring programming language version 1.7 book - Part 17 of 196
PDF
The Ring programming language version 1.7 book - Part 7 of 196
PDF
The Ring programming language version 1.5.2 book - Part 6 of 181
PDF
The Ring programming language version 1.10 book - Part 102 of 212
PDF
The Ring programming language version 1.7 book - Part 14 of 196
PDF
The Ring programming language version 1.8 book - Part 7 of 202
PDF
The Ring programming language version 1.6 book - Part 13 of 189
PDF
The Ring programming language version 1.6 book - Part 183 of 189
PDF
The Ring programming language version 1.6 book - Part 184 of 189
PDF
The Ring programming language version 1.5.2 book - Part 26 of 181
PDF
The Ring programming language version 1.2 book - Part 79 of 84
PDF
The Ring programming language version 1.7 book - Part 30 of 196
PDF
The Ring programming language version 1.5.1 book - Part 36 of 180
PDF
The Ring programming language version 1.9 book - Part 56 of 210
PDF
The Ring programming language version 1.8 book - Part 94 of 202
The Ring programming language version 1.3 book - Part 83 of 88
The Ring programming language version 1.5.1 book - Part 13 of 180
The Ring programming language version 1.5.4 book - Part 15 of 185
The Ring programming language version 1.5.3 book - Part 85 of 184
The Ring programming language version 1.6 book - Part 16 of 189
The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.7 book - Part 7 of 196
The Ring programming language version 1.5.2 book - Part 6 of 181
The Ring programming language version 1.10 book - Part 102 of 212
The Ring programming language version 1.7 book - Part 14 of 196
The Ring programming language version 1.8 book - Part 7 of 202
The Ring programming language version 1.6 book - Part 13 of 189
The Ring programming language version 1.6 book - Part 183 of 189
The Ring programming language version 1.6 book - Part 184 of 189
The Ring programming language version 1.5.2 book - Part 26 of 181
The Ring programming language version 1.2 book - Part 79 of 84
The Ring programming language version 1.7 book - Part 30 of 196
The Ring programming language version 1.5.1 book - Part 36 of 180
The Ring programming language version 1.9 book - Part 56 of 210
The Ring programming language version 1.8 book - Part 94 of 202

More from Mahmoud Samir Fayed (20)

PDF
The Ring programming language version 1.10 book - Part 212 of 212
PDF
The Ring programming language version 1.10 book - Part 211 of 212
PDF
The Ring programming language version 1.10 book - Part 210 of 212
PDF
The Ring programming language version 1.10 book - Part 208 of 212
PDF
The Ring programming language version 1.10 book - Part 207 of 212
PDF
The Ring programming language version 1.10 book - Part 205 of 212
PDF
The Ring programming language version 1.10 book - Part 206 of 212
PDF
The Ring programming language version 1.10 book - Part 204 of 212
PDF
The Ring programming language version 1.10 book - Part 203 of 212
PDF
The Ring programming language version 1.10 book - Part 202 of 212
PDF
The Ring programming language version 1.10 book - Part 201 of 212
PDF
The Ring programming language version 1.10 book - Part 200 of 212
PDF
The Ring programming language version 1.10 book - Part 199 of 212
PDF
The Ring programming language version 1.10 book - Part 198 of 212
PDF
The Ring programming language version 1.10 book - Part 197 of 212
PDF
The Ring programming language version 1.10 book - Part 196 of 212
PDF
The Ring programming language version 1.10 book - Part 195 of 212
PDF
The Ring programming language version 1.10 book - Part 194 of 212
PDF
The Ring programming language version 1.10 book - Part 193 of 212
PDF
The Ring programming language version 1.10 book - Part 192 of 212
The Ring programming language version 1.10 book - Part 212 of 212
The Ring programming language version 1.10 book - Part 211 of 212
The Ring programming language version 1.10 book - Part 210 of 212
The Ring programming language version 1.10 book - Part 208 of 212
The Ring programming language version 1.10 book - Part 207 of 212
The Ring programming language version 1.10 book - Part 205 of 212
The Ring programming language version 1.10 book - Part 206 of 212
The Ring programming language version 1.10 book - Part 204 of 212
The Ring programming language version 1.10 book - Part 203 of 212
The Ring programming language version 1.10 book - Part 202 of 212
The Ring programming language version 1.10 book - Part 201 of 212
The Ring programming language version 1.10 book - Part 200 of 212
The Ring programming language version 1.10 book - Part 199 of 212
The Ring programming language version 1.10 book - Part 198 of 212
The Ring programming language version 1.10 book - Part 197 of 212
The Ring programming language version 1.10 book - Part 196 of 212
The Ring programming language version 1.10 book - Part 195 of 212
The Ring programming language version 1.10 book - Part 194 of 212
The Ring programming language version 1.10 book - Part 193 of 212
The Ring programming language version 1.10 book - Part 192 of 212

Recently uploaded (20)

PDF
Revolutionizing recommendations a survey: a comprehensive exploration of mode...
PDF
Optimizing bioinformatics applications: a novel approach with human protein d...
PDF
Fitaura: AI & Machine Learning Powered Fitness Tracker
PPTX
Blending method and technology for hydrogen.pptx
PPTX
Report in SIP_Distance_Learning_Technology_Impact.pptx
PDF
TicketRoot: Event Tech Solutions Deck 2025
PDF
GDG Cloud Southlake #45: Patrick Debois: The Impact of GenAI on Development a...
PDF
Applying Agentic AI in Enterprise Automation
PDF
Ebook - The Future of AI A Comprehensive Guide.pdf
PDF
EGCB_Solar_Project_Presentation_and Finalcial Analysis.pdf
PDF
Child-friendly e-learning for artificial intelligence education in Indonesia:...
PDF
Be ready for tomorrow’s needs with a longer-lasting, higher-performing PC
PDF
Intravenous drug administration application for pediatric patients via augmen...
PPT
Overviiew on Intellectual property right
PPTX
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
PDF
Advancements in abstractive text summarization: a deep learning approach
PDF
ELLIE29.pdfWETWETAWTAWETAETAETERTRTERTER
PDF
Examining Bias in AI Generated News Content.pdf
PDF
Human Computer Interaction Miterm Lesson
PPTX
AQUEEL MUSHTAQUE FAKIH COMPUTER CENTER .
Revolutionizing recommendations a survey: a comprehensive exploration of mode...
Optimizing bioinformatics applications: a novel approach with human protein d...
Fitaura: AI & Machine Learning Powered Fitness Tracker
Blending method and technology for hydrogen.pptx
Report in SIP_Distance_Learning_Technology_Impact.pptx
TicketRoot: Event Tech Solutions Deck 2025
GDG Cloud Southlake #45: Patrick Debois: The Impact of GenAI on Development a...
Applying Agentic AI in Enterprise Automation
Ebook - The Future of AI A Comprehensive Guide.pdf
EGCB_Solar_Project_Presentation_and Finalcial Analysis.pdf
Child-friendly e-learning for artificial intelligence education in Indonesia:...
Be ready for tomorrow’s needs with a longer-lasting, higher-performing PC
Intravenous drug administration application for pediatric patients via augmen...
Overviiew on Intellectual property right
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
Advancements in abstractive text summarization: a deep learning approach
ELLIE29.pdfWETWETAWTAWETAETAETERTRTERTER
Examining Bias in AI Generated News Content.pdf
Human Computer Interaction Miterm Lesson
AQUEEL MUSHTAQUE FAKIH COMPUTER CENTER .

The Ring programming language version 1.5.2 book - Part 14 of 181

  • 1. Ring Documentation, Release 1.5.2 class program # Keywords Accept=0 numbers=0 then=0 print=0 the=0 sum=0 # Execution func braceexpreval x value = x func getnumbers for x=1 to value see "Enter Number ("+x+") :" give nNumber aNumbers + nNumber next func getsum nSUm = 0 for x in aNumbers nSum+= x next see "The Sum : " + nSum private value=0 aNumbers=[] Output: Enter Number (1) :3 Enter Number (2) :4 The Sum : 7 for more information see the “Natural Language Programming” chapter. 8.3 Generate/Execute Ring Object Files (*.ringo) This feature enable you to distribute your applications without distributing the source code. Also it makes application distribution a simple process where you get one Ring object file for the complete project (many source code files). Also using Ring object file remove the loading time required for compiling the application. Check the “command line options” chapter to know more about this feature. 8.4 Syntax Flexibility and different styles for I/O and Control Struc- tures Programmers are sensitive to the programming language syntax. Great programmers know how to work using many different styles but each programmer may have his/her favorite style. Each programming language comes with a style that you may like or not. Ring is just one of these languages, but as a response to many programmers asking for a better syntax we decided to provide more options. Also some of these features are very necessary for Natural Language Programming. Example : We have two commands to change language keywords and operators. ChangeRingOperator + plus ChangeRingKeyword see print Print 5 plus 5 8.3. Generate/Execute Ring Object Files (*.ringo) 105
  • 2. Ring Documentation, Release 1.5.2 ChangeRingOperator plus + ChangeRingKeyword print see We have new styles (Optional) for Input/Output. Example : Put "What is your name? " Get cName Put "Hello " + cName Example : Load "stdlib.ring" Print("What is your name? ") # print message on screen cName=GetString() # get input from the user print("Hello #{cName}") # say hello! We have new styles (optional) for control structures. Example : While True Put " Main Menu --------- (1) Say Hello (2) About (3) Exit " Get nOption Switch nOption Case 1 Put "Enter your name : " Get name Put "Hello " + name + nl Case 2 Put "Sample : using while loop" + nl Case 3 Bye Else Put "bad option..." + nl End End Example : Load "stdlib.ring" While True { print(" Main Menu --------- (1) Say Hello (2) About (3) Exit 8.4. Syntax Flexibility and different styles for I/O and Control Structures 106
  • 3. Ring Documentation, Release 1.5.2 ") nOption = GetString() switch nOption { case 1 print("Enter your name : ") name = getstring() print("Hello #{name}n") case 2 print("Sample : using switch statementn") case 3 Bye else print("bad option...n") } } Check the next chapters:- • Getting Started - Second Style • Getting Started - Third Style • Control Structures - Second Style - May looks like Lua and Ruby • Control Structures - Third Style - May looks like C (uses braces) • Syntax Flexibility Note: All of these styles are provided automatically by the compiler at the same time, It’s better to select one style for the same project (you can create your style as a mix from these styles) for example you can use Put/Get and Braces. 8.5 New Functions and Changes Changed: • get() function : changed to sysget() • sort() function : can now work on list of objects • find() function : can now work on list of objects Added: • clockspersecond() • CurrentDir() • ExeFileName() • ChDir() • ExeFolder() • varptr() • space() • nullpointer() 8.5. New Functions and Changes 107
  • 4. Ring Documentation, Release 1.5.2 • object2pointer() • pointer2object() Check the next chapters • System Functions • Object Oriented Programming (OOP) • Low Level Functions 8.6 StdLib functions and classes written in Ring Ring 1.1 comes with a library called StdLib, it’s written in Ring by the help of Ring Team The library provide a useful group of new functions and classes Example: Load "stdlib.ring" Puts("Test Times()") Times ( 3 , func { see "Hello, World!" + nl } ) Example: Load "stdlib.ring" Puts("Test Map()") See Map( 1:10, func x { return x*x } ) Example: Load "stdlib.ring" Puts("Test Filter()") See Filter( 1:10 , func x { if x <= 5 return true else return false ok } ) Example: Load "stdlib.ring" See "Testing the String Class" + nl oString = new string("Hello, World!") oString.println() oString.upper().println() oString.lower().println() oString.left(5).println() oString.right(6).println() Example: Load "stdlib.ring" oList = new list ( [1,2,3] ) oList.Add(4) oList.print() Example: 8.6. StdLib functions and classes written in Ring 108
  • 5. Ring Documentation, Release 1.5.2 Load "stdlib.ring" oStack = new Stack oStack.push(1) oStack.push(2) oStack.push(3) see oStack.pop() + nl Example: Load "stdlib.ring" oQueue = new Queue oQueue.add(1) oQueue.add(2) oQueue.add(3) see oQueue.remove() + nl Example: Load "stdlib.ring" ohashtable = new hashtable See "Test the hashtable Class Methods" + nl ohashtable { Add("Egypt","Cairo") Add("KSA","Riyadh") see self["Egypt"] + nl see self["KSA"] + nl see contains("Egypt") + nl see contains("USA") + nl see index("KSA") + NL print() delete(index("KSA")) see copy("*",60) + nl print() } Example: Load "stdlib.ring" otree = new tree See "Test the tree Class Methods" + nl otree { set("The first step") # set the root node value see value() + nl Add("one") Add("two") Add("three") { Add("3.1") Add("3.2") Add("3.3") see children } see children oTree.children[2] { Add("2.1") Add("2.2") Add("2.3") { Add("2.3.1") Add("2.3.2") Add("test") 8.6. StdLib functions and classes written in Ring 109
  • 6. Ring Documentation, Release 1.5.2 } } oTree.children[2].children[3].children[3].set("2.3.3") } see copy("*",60) + nl oTree.print() Check the next chapters: • StdLib Functions • StdLib Classes 8.7 RingLibSDL Ring 1.0 provided RingAllegro to be able to create games using the Allegro game programming library Now Ring 1.1 provide RingLibSDL also so we can have the choice between Allegro or LibSDL Example: Load "libsdl.ring" SDL_Init(SDL_INIT_EVERYTHING) win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN) SDL_Delay(2000) SDL_DestroyWindow(win) SDL_Quit() See the RingLibSDL Chapter. 8.8 Demo Project - Game Engine for 2D Games In practice we would create a game engine in a language like C/C++ to get the best performance then provide Ring classes to use the engine. But many 2D Games are simple and creating a game engine in Ring will be fast enough in many cases Also this would be a good demo project to learn about the language concepts where we build things using Object Ori- ented Programming (OOP) then access the power that we have using declarative programming using nested structures or using natural programming. In this project we selected the first way (declarative programming using nested structures) Example: Load "gameengine.ring" # Give Control to the Game Engine func main # Called by the Game Engine oGame = New Game # Create the Game Object { title = "My First Game" text { x = 10 y=50 animate = false size = 20 8.7. RingLibSDL 110
  • 7. Ring Documentation, Release 1.5.2 file = "fonts/pirulen.ttf" text = "game development using ring is very fun!" color = rgb(0,0,0) # Color = black } text { x = 10 y=150 # Animation Part ====================================== animate = true # Use Animation direction = GE_DIRECTION_INCVERTICAL # Increase y point = 400 # Continue until y=400 nStep = 3 # Each time y+= 3 #====================================================== size = 20 file = "fonts/pirulen.ttf" text = "welcome to the real world!" color = rgb(0,0,255) # Color = Blue } Sound { # Play Sound file = "sound/music1.wav" # Sound File Name } } # Start the Events Loop See the “Demo Project - Game Engine for 2D Games” chapter. 8.9 RingSQLite Ring 1.0 provided support for ODBC to use any database and provided native support for MySQL. Now Ring 1.1 provide native support for SQLite database too. Example: oSQLite = sqlite_init() sqlite_open(oSQLite,"mytest.db") sql = "CREATE TABLE COMPANY(" + "ID INT PRIMARY KEY NOT NULL," + "NAME TEXT NOT NULL," + "AGE INT NOT NULL," + "ADDRESS CHAR(50)," + "SALARY REAL );" sqlite_execute(oSQLite,sql) sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (1, 'Mahmoud', 29, 'Jeddah', 20000.00 ); " + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (2, 'Ahmed', 27, 'Jeddah', 15000.00 ); " + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + "VALUES (3, 'Mohammed', 31, 'Egypt', 20000.00 );" + "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)" + "VALUES (4, 'Ibrahim', 24, 'Egypt ', 65000.00 );" sqlite_execute(oSQLite,sql) aResult = sqlite_execute(oSQLite,"select * from COMPANY") 8.9. RingSQLite 111
  • 8. Ring Documentation, Release 1.5.2 for x in aResult for t in x see t[2] + nl next next see copy("*",50) + nl for x in aResult see x["name"] + nl next sqlite_close(oSQLite) 8.10 Better Code Generator for Extensions We are using the code generator (written in Ring) every day to add new libraries to Ring. The generator is used to create RingQt and RingAllegro Also in Ring 1.1 it’s used to create RingLibSDL. more features are added like • Set/Get structure members (numbers & pointers) • Using constants • Better Generated Code See the Code Generator chapter. 8.11 Using Self.Attribute in the Class Region to define new attributes We can use Self.Attribute in the Class Region (after the class name and before any methods) to define new attributes. class Person name # Define name as attribute if it's not a global variable address phone class person2 self.name # Must Define the attribute self.address self.phone 8.12 Using This.Attribute in nested Braces inside the Class Methods We can use nested braces {} while we are inside methods to access another objects, In this case the current object scope will be changed while we are inside the brace and Self will point to the object that we access using braces {}. In this case we can use This.Attribute and This.Method() to access the object that will be created from the current class. Check the Object Oriented Programming chapter for more information. Also Check the Weight History Application in GUI Development using RingQt chapter. 8.10. Better Code Generator for Extensions 112
  • 9. Ring Documentation, Release 1.5.2 8.13 Better Documentation Ring 1.1 documentation (800 pages) is better than Ring 1.0 documentation (340 pages) Many chapters are added for providing better information about the language like • Language Reference • Scope Rules • FAQ And more! 8.13. Better Documentation 113
  • 10. CHAPTER NINE BUILDING FROM SOURCE CODE The Ring programming language is a free open source product (MIT License). You can build Ring using CMake or using Scripts (Batch Files or Shell Scripts). The next steps explains building using scripts. 9.1 Building using Microsoft Windows Get the source code git clone http://github.com/ring-lang/ring.git Build Ring (Compiler/VM) cd ring/src buildvc.bat buildvcw.bat Build RingODBC cd ../extensions/ringodbc buildvc.bat Build RingMySQL cd ../extensions/ringmysql buildvc.bat Build RingSQLite cd ../extensions/ringsqlite buildvc.bat Build RingOpenSSL cd ../extensions/ringopenssl buildvc.bat Build RingInternet cd ../extensions/ringinternet buildvc.bat Generate RingAllegro Source Code and Build 114