SlideShare a Scribd company logo
Ring Documentation, Release 1.8
fp = fopen("ptrcmp.ring","r")
fp2 = fp
fp3 = fopen("ptrcmp.ring","r")
see ptrcmp(fp,fp2) + nl
see ptrcmp(fp,fp3) + nl
fclose(fp)
fclose(fp3)
Output:
1
0
Also we can compare between them using the ‘=’ operator
Example:
fp = fopen("ptrcmp2.ring","r")
fp2 = fopen("ptrcmp2.ring","r")
fp3 = fp
see fp = fp2
see nl
see fp = fp3
fclose(fp)
fclose(fp2)
Output:
0
1
Example:
The next function in stdlib.ring uses the PrevFileName() to know if the file of the caller function is the main source
file of the program or not.
Func IsMainSourceFile
if PrevFileName() = sysargv[2]
return true
ok
return false
10.3 Better Functions
The find() function is updated to support searching in lists using C pointers like GUI Objects.
The type() function is updated to display the C pointers types (like the GUI Object Class Name).
10.4 Better Ring Notepad
The Ring Notepad will save the current line number of opened files to be restored when we switch between files.
Also Ring Notepad will ask the user to save the file if the file content is changed when the user switch between files.
10.3. Better Functions 141
Ring Documentation, Release 1.8
10.5 Better RingQt
RingQt classes are updated to include methods to get events (The code that will be executed when an event is fired).
This is necessary to enable/disable events for some time or to get the events information.
For example the next code disable an event then call a method then enable the event again.
cEvent = oView.oListResult.getCurrentItemChangedEvent()
oView.oListResult.setCurrentItemChangedEvent("")
FindValueAction() # Call Method while an event is disabled
oView.oListResult.setCurrentItemChangedEvent(cEvent)
Also the QAllEvents class is updated where we can set the output from the event function to be true or false using a
new method added to the class called setEventOutput.
Load "guilib.ring"
MyApp = New qApp {
win = new qWidget() {
setwindowtitle("Hello World")
setGeometry(100,100,370,250)
lineedit1 = new qlineedit(win) {
setGeometry(10,100,350,30)
setinputmask("9999;_")
oFilter = new qallevents(lineedit1)
oFilter.setfocusoutEvent("pMove()")
installeventfilter(oFilter)
}
lineedit2 = new qlineedit(win) {
setGeometry(10,150,350,30)
}
show()
}
exec()
}
func pMove
win.setWindowTitle("xxxx")
oFilter.setEventOutput(False)
10.6 Objects Library for RingQt
Ring 1.2 comes with the Objects library for RingQt applications. Instead of using global variables for windows
objects and connecting events to objects using the object name, the Objects Library will manage the GUI objects and
will provide a more natural API to quickly create one or many windows from the same class and the library provide
a way to quickly set methods to be executed when an event is fired. Also the library provide a natural interface to
quickly use the parent or the caller windows from the child or sub windows.
The Objects Library is designed to be used with the MVC Design Pattern.
The Objects Library is merged in RingQt so you can use it directly when you use RingQt
Example :
load "guilib.ring"
new qApp {
10.5. Better RingQt 142
Ring Documentation, Release 1.8
open_window( :MainWindowController )
exec()
}
class MainWindowController from WindowsControllerParent
oView = new MainWindowView
func SubWindowAction
Open_window( :SubWindowController )
Last_Window().SetParentObject(self)
class MainWindowView from WindowsViewParent
win = new qWidget() {
SetWindowTitle("Main Window")
btnSub = new qPushButton(win) {
setText("Sub Window")
setClickEvent( Method( :SubWindowAction ) )
}
resize(400,400)
}
class SubWindowController from WindowsControllerParent
oView = new SubWindowView
func SetMainWindowTitleAction
Parent().oView.win.SetWindowTitle("Message from the Sub Window")
oView.win.SetWindowTitle("Click Event Done!")
class SubWindowView from WindowsViewParent
win = new qWidget() {
SetWindowTitle("Sub Window")
btnMsg = new qPushButton(win) {
setText("Set Main Window Title")
setClickEvent( Method( :SetMainWindowTitleAction ) )
}
btnClose = new qPushButton(win) {
Move(200,0)
setText("Close")
setClickEvent( Method( :CloseAction ) )
}
resize(400,400)
}
10.7 RingLibCurl
The LibCurl library is used starting from Ring 1.0 for the Download() and SendEmail() functions implementation. In
Ring 1.2 more functions are added to provide a powerful library (RingLibCurl) around LibCurl.
Example:
load "libcurl.ring"
curl = curl_easy_init()
cPostThis = "page=4&Number1=4&Number2=5"
curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3")
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis)
10.7. RingLibCurl 143
Ring Documentation, Release 1.8
curl_easy_perform(curl)
curl_easy_cleanup(curl)
10.8 Better Call Command
The Call command is updated to support calling functions from object attributes also (not only variables).
For example the next code from the Stars Fighter Game
cFunc = oself.keypress
call cFunc(oGame,oSelf,Key_Space)
Can be written in one line
call oself.keypress(oGame,oSelf,Key_Space)
10.9 Using NULL instead of NULLPointer()
We can pass NULL to functions instead of using NULLPointer()
For example the next code from RingLibSDL
SDL_RenderCopy(SDL_ren,tex,NULLPointer(),rect)
Can be written as in the next line
SDL_RenderCopy(SDL_ren,tex,NULL,rect)
10.10 Display Warnings Option
In Ring 1.2 the Ring compiler is updated to include the Display Warnings option (-w)
Example:
load "stdlib.ring"
load "stdlib.ring"
compiling the program using the Display Warnings option will display the file duplication warning, While without that
option the error will pass silent.
This is a warning (not an error) because in large projects you may use the same file more than one time. For example
it’s common to start each file with the next code. where the function IsMainSourceFile() is part from the stdlib.ring
load "stdlib.ring"
if IsMainSourceFile()
// Testing
ok
10.8. Better Call Command 144
Ring Documentation, Release 1.8
10.11 Better Quality
Ring 1.2 is more stable, We discovered and fixed more bugs during Ring usage everyday in practical projects. Some
functions are optimized to be faster like the SubStr() function. Also the documentation is more better.
10.11. Better Quality 145
CHAPTER
ELEVEN
WHAT IS NEW IN RING 1.1?
In this chapter we will learn about the changes and new features in Ring 1.1 release.
11.1 List of changes and new features
Ring 1.1 comes with many new features
• Better Natural Language Programming Support
• Generate/Execute Ring Object Files (*.ringo)
• Syntax Flexibility and different styles for I/O and Control Structures
• New Functions and Changes
• StdLib functions and classes written in Ring
• RingLibSDL
• Demo Project - Game Engine for 2D Games
• RingSQLite
• Better Code Generator for Extensions
• Using Self.Attribute in the Class Region to define new attributes
• Using This.Attribute in nested Braces inside the Class Methods
• Better Documentation
11.2 Better Natural Language Programming Support
Ring is an innovative language because of it’s compact syntax, smart implementation (small, transparent & visual) and
it’s ability to create declarative and natural domain specific languages in a fraction of time.
This release add support for calling methods when an expression is evaluated
check this example:
# Natural Code
new program {
Accept 2 numbers then print the sum
}
# Natural Code Implementation
146
Ring Documentation, Release 1.8
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.
11.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.
11.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
11.3. Generate/Execute Ring Object Files (*.ringo) 147
Ring Documentation, Release 1.8
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
11.4. Syntax Flexibility and different styles for I/O and Control Structures 148
Ring Documentation, Release 1.8
")
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.
11.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()
11.5. New Functions and Changes 149
Ring Documentation, Release 1.8
• object2pointer()
• pointer2object()
Check the next chapters
• System Functions
• Object Oriented Programming (OOP)
• Low Level Functions
11.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:
11.6. StdLib functions and classes written in Ring 150

More Related Content

What's hot (20)

PDF
Apache PIG - User Defined Functions
Christoph Bauer
 
PDF
The Ring programming language version 1.7 book - Part 43 of 196
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
PDF
Creating Lazy stream in CSharp
Dhaval Dalal
 
PDF
The Ring programming language version 1.2 book - Part 54 of 84
Mahmoud Samir Fayed
 
PDF
Clojure - A new Lisp
elliando dias
 
PDF
Spock: A Highly Logical Way To Test
Howard Lewis Ship
 
PDF
Python高级编程(二)
Qiangning Hong
 
PDF
The Ring programming language version 1.5.1 book - Part 38 of 180
Mahmoud Samir Fayed
 
PPTX
Neuroevolution in Elixir
Jeff Smith
 
PDF
The Ring programming language version 1.7 book - Part 79 of 196
Mahmoud Samir Fayed
 
PDF
Grails/Groovyによる開発事例紹介
Kiyotaka Oku
 
PDF
DRYing to Monad in Java8
Dhaval Dalal
 
PPTX
Kotlin coroutines and spring framework
Sunghyouk Bae
 
PDF
The Ring programming language version 1.8 book - Part 45 of 202
Mahmoud Samir Fayed
 
PDF
Functions
Marieswaran Ramasamy
 
PDF
EMFPath
mikaelbarbero
 
PDF
Python decorators (中文)
Yiwei Chen
 
KEY
Python在豆瓣的应用
Qiangning Hong
 
PDF
The Ring programming language version 1.3 book - Part 6 of 88
Mahmoud Samir Fayed
 
Apache PIG - User Defined Functions
Christoph Bauer
 
The Ring programming language version 1.7 book - Part 43 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
Creating Lazy stream in CSharp
Dhaval Dalal
 
The Ring programming language version 1.2 book - Part 54 of 84
Mahmoud Samir Fayed
 
Clojure - A new Lisp
elliando dias
 
Spock: A Highly Logical Way To Test
Howard Lewis Ship
 
Python高级编程(二)
Qiangning Hong
 
The Ring programming language version 1.5.1 book - Part 38 of 180
Mahmoud Samir Fayed
 
Neuroevolution in Elixir
Jeff Smith
 
The Ring programming language version 1.7 book - Part 79 of 196
Mahmoud Samir Fayed
 
Grails/Groovyによる開発事例紹介
Kiyotaka Oku
 
DRYing to Monad in Java8
Dhaval Dalal
 
Kotlin coroutines and spring framework
Sunghyouk Bae
 
The Ring programming language version 1.8 book - Part 45 of 202
Mahmoud Samir Fayed
 
EMFPath
mikaelbarbero
 
Python decorators (中文)
Yiwei Chen
 
Python在豆瓣的应用
Qiangning Hong
 
The Ring programming language version 1.3 book - Part 6 of 88
Mahmoud Samir Fayed
 

Similar to The Ring programming language version 1.8 book - Part 18 of 202 (20)

PDF
The Ring programming language version 1.5.4 book - Part 14 of 185
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.1 book - Part 13 of 180
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.7 book - Part 17 of 196
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.6 book - Part 16 of 189
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.10 book - Part 12 of 212
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.7 book - Part 92 of 196
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.3 book - Part 7 of 88
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.9 book - Part 19 of 210
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.10 book - Part 13 of 212
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.1 book - Part 12 of 180
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.7 book - Part 8 of 196
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.9 book - Part 17 of 210
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.10 book - Part 102 of 212
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.4 book - Part 15 of 185
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.8 book - Part 17 of 202
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.8 book - Part 15 of 202
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.3 book - Part 13 of 184
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.6 book - Part 8 of 189
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.5.4 book - Part 81 of 185
Mahmoud Samir Fayed
 
PDF
The Ring programming language version 1.7 book - Part 9 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 14 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 13 of 180
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 17 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.6 book - Part 16 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 12 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 92 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 7 of 88
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 19 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 13 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 12 of 180
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 8 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 17 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 102 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 15 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 17 of 202
Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 15 of 202
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 13 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.6 book - Part 8 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 81 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 9 of 196
Mahmoud Samir Fayed
 
Ad

More from Mahmoud Samir Fayed (20)

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

Recently uploaded (20)

PDF
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PDF
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
PPTX
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
PPTX
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
PDF
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
PPTX
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
PDF
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
PDF
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
PDF
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PDF
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
PPTX
Tally software_Introduction_Presentation
AditiBansal54083
 
PPTX
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
PPTX
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
PDF
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
PDF
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
PDF
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
PDF
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 
[Solution] Why Choose the VeryPDF DRM Protector Custom-Built Solution for You...
Lingwen1998
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
Driver Easy Pro 6.1.1 Crack Licensce key 2025 FREE
utfefguu
 
Agentic Automation Journey Series Day 2 – Prompt Engineering for UiPath Agents
klpathrudu
 
Agentic Automation Journey Session 1/5: Context Grounding and Autopilot for E...
klpathrudu
 
Unlock Efficiency with Insurance Policy Administration Systems
Insurance Tech Services
 
Change Common Properties in IBM SPSS Statistics Version 31.pptx
Version 1 Analytics
 
Linux Certificate of Completion - LabEx Certificate
VICTOR MAESTRE RAMIREZ
 
AI + DevOps = Smart Automation with devseccops.ai.pdf
Devseccops.ai
 
Top Agile Project Management Tools for Teams in 2025
Orangescrum
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
vMix Pro 28.0.0.42 Download vMix Registration key Bundle
kulindacore
 
Tally software_Introduction_Presentation
AditiBansal54083
 
Empowering Asian Contributions: The Rise of Regional User Groups in Open Sour...
Shane Coughlan
 
Help for Correlations in IBM SPSS Statistics.pptx
Version 1 Analytics
 
4K Video Downloader Plus Pro Crack for MacOS New Download 2025
bashirkhan333g
 
Odoo CRM vs Zoho CRM: Honest Comparison 2025
Odiware Technologies Private Limited
 
Why Businesses Are Switching to Open Source Alternatives to Crystal Reports.pdf
Varsha Nayak
 
Thread In Android-Mastering Concurrency for Responsive Apps.pdf
Nabin Dhakal
 

The Ring programming language version 1.8 book - Part 18 of 202

  • 1. Ring Documentation, Release 1.8 fp = fopen("ptrcmp.ring","r") fp2 = fp fp3 = fopen("ptrcmp.ring","r") see ptrcmp(fp,fp2) + nl see ptrcmp(fp,fp3) + nl fclose(fp) fclose(fp3) Output: 1 0 Also we can compare between them using the ‘=’ operator Example: fp = fopen("ptrcmp2.ring","r") fp2 = fopen("ptrcmp2.ring","r") fp3 = fp see fp = fp2 see nl see fp = fp3 fclose(fp) fclose(fp2) Output: 0 1 Example: The next function in stdlib.ring uses the PrevFileName() to know if the file of the caller function is the main source file of the program or not. Func IsMainSourceFile if PrevFileName() = sysargv[2] return true ok return false 10.3 Better Functions The find() function is updated to support searching in lists using C pointers like GUI Objects. The type() function is updated to display the C pointers types (like the GUI Object Class Name). 10.4 Better Ring Notepad The Ring Notepad will save the current line number of opened files to be restored when we switch between files. Also Ring Notepad will ask the user to save the file if the file content is changed when the user switch between files. 10.3. Better Functions 141
  • 2. Ring Documentation, Release 1.8 10.5 Better RingQt RingQt classes are updated to include methods to get events (The code that will be executed when an event is fired). This is necessary to enable/disable events for some time or to get the events information. For example the next code disable an event then call a method then enable the event again. cEvent = oView.oListResult.getCurrentItemChangedEvent() oView.oListResult.setCurrentItemChangedEvent("") FindValueAction() # Call Method while an event is disabled oView.oListResult.setCurrentItemChangedEvent(cEvent) Also the QAllEvents class is updated where we can set the output from the event function to be true or false using a new method added to the class called setEventOutput. Load "guilib.ring" MyApp = New qApp { win = new qWidget() { setwindowtitle("Hello World") setGeometry(100,100,370,250) lineedit1 = new qlineedit(win) { setGeometry(10,100,350,30) setinputmask("9999;_") oFilter = new qallevents(lineedit1) oFilter.setfocusoutEvent("pMove()") installeventfilter(oFilter) } lineedit2 = new qlineedit(win) { setGeometry(10,150,350,30) } show() } exec() } func pMove win.setWindowTitle("xxxx") oFilter.setEventOutput(False) 10.6 Objects Library for RingQt Ring 1.2 comes with the Objects library for RingQt applications. Instead of using global variables for windows objects and connecting events to objects using the object name, the Objects Library will manage the GUI objects and will provide a more natural API to quickly create one or many windows from the same class and the library provide a way to quickly set methods to be executed when an event is fired. Also the library provide a natural interface to quickly use the parent or the caller windows from the child or sub windows. The Objects Library is designed to be used with the MVC Design Pattern. The Objects Library is merged in RingQt so you can use it directly when you use RingQt Example : load "guilib.ring" new qApp { 10.5. Better RingQt 142
  • 3. Ring Documentation, Release 1.8 open_window( :MainWindowController ) exec() } class MainWindowController from WindowsControllerParent oView = new MainWindowView func SubWindowAction Open_window( :SubWindowController ) Last_Window().SetParentObject(self) class MainWindowView from WindowsViewParent win = new qWidget() { SetWindowTitle("Main Window") btnSub = new qPushButton(win) { setText("Sub Window") setClickEvent( Method( :SubWindowAction ) ) } resize(400,400) } class SubWindowController from WindowsControllerParent oView = new SubWindowView func SetMainWindowTitleAction Parent().oView.win.SetWindowTitle("Message from the Sub Window") oView.win.SetWindowTitle("Click Event Done!") class SubWindowView from WindowsViewParent win = new qWidget() { SetWindowTitle("Sub Window") btnMsg = new qPushButton(win) { setText("Set Main Window Title") setClickEvent( Method( :SetMainWindowTitleAction ) ) } btnClose = new qPushButton(win) { Move(200,0) setText("Close") setClickEvent( Method( :CloseAction ) ) } resize(400,400) } 10.7 RingLibCurl The LibCurl library is used starting from Ring 1.0 for the Download() and SendEmail() functions implementation. In Ring 1.2 more functions are added to provide a powerful library (RingLibCurl) around LibCurl. Example: load "libcurl.ring" curl = curl_easy_init() cPostThis = "page=4&Number1=4&Number2=5" curl_easy_setopt(curl, CURLOPT_URL, "http://localhost/ringapp/index.ring?page=3") curl_easy_setopt(curl, CURLOPT_POSTFIELDS, cPostThis) 10.7. RingLibCurl 143
  • 4. Ring Documentation, Release 1.8 curl_easy_perform(curl) curl_easy_cleanup(curl) 10.8 Better Call Command The Call command is updated to support calling functions from object attributes also (not only variables). For example the next code from the Stars Fighter Game cFunc = oself.keypress call cFunc(oGame,oSelf,Key_Space) Can be written in one line call oself.keypress(oGame,oSelf,Key_Space) 10.9 Using NULL instead of NULLPointer() We can pass NULL to functions instead of using NULLPointer() For example the next code from RingLibSDL SDL_RenderCopy(SDL_ren,tex,NULLPointer(),rect) Can be written as in the next line SDL_RenderCopy(SDL_ren,tex,NULL,rect) 10.10 Display Warnings Option In Ring 1.2 the Ring compiler is updated to include the Display Warnings option (-w) Example: load "stdlib.ring" load "stdlib.ring" compiling the program using the Display Warnings option will display the file duplication warning, While without that option the error will pass silent. This is a warning (not an error) because in large projects you may use the same file more than one time. For example it’s common to start each file with the next code. where the function IsMainSourceFile() is part from the stdlib.ring load "stdlib.ring" if IsMainSourceFile() // Testing ok 10.8. Better Call Command 144
  • 5. Ring Documentation, Release 1.8 10.11 Better Quality Ring 1.2 is more stable, We discovered and fixed more bugs during Ring usage everyday in practical projects. Some functions are optimized to be faster like the SubStr() function. Also the documentation is more better. 10.11. Better Quality 145
  • 6. CHAPTER ELEVEN WHAT IS NEW IN RING 1.1? In this chapter we will learn about the changes and new features in Ring 1.1 release. 11.1 List of changes and new features Ring 1.1 comes with many new features • Better Natural Language Programming Support • Generate/Execute Ring Object Files (*.ringo) • Syntax Flexibility and different styles for I/O and Control Structures • New Functions and Changes • StdLib functions and classes written in Ring • RingLibSDL • Demo Project - Game Engine for 2D Games • RingSQLite • Better Code Generator for Extensions • Using Self.Attribute in the Class Region to define new attributes • Using This.Attribute in nested Braces inside the Class Methods • Better Documentation 11.2 Better Natural Language Programming Support Ring is an innovative language because of it’s compact syntax, smart implementation (small, transparent & visual) and it’s ability to create declarative and natural domain specific languages in a fraction of time. This release add support for calling methods when an expression is evaluated check this example: # Natural Code new program { Accept 2 numbers then print the sum } # Natural Code Implementation 146
  • 7. Ring Documentation, Release 1.8 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. 11.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. 11.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 11.3. Generate/Execute Ring Object Files (*.ringo) 147
  • 8. Ring Documentation, Release 1.8 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 11.4. Syntax Flexibility and different styles for I/O and Control Structures 148
  • 9. Ring Documentation, Release 1.8 ") 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. 11.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() 11.5. New Functions and Changes 149
  • 10. Ring Documentation, Release 1.8 • object2pointer() • pointer2object() Check the next chapters • System Functions • Object Oriented Programming (OOP) • Low Level Functions 11.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: 11.6. StdLib functions and classes written in Ring 150