SlideShare a Scribd company logo
Ring Documentation, Release 1.9
conn = PQconnectdb(conninfo)
if (PQstatus(conn) != CONNECTION_OK)
fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn))
call exit_nicely(conn)
ok
res = PQexec(conn, "
DROP DATABASE mahdb;
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Remove failed: " + PQerrorMessage(conn))
PQclear(res)
ok
PQclear(res)
res = PQexec(conn, "CREATE DATABASE mahdb;")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Create database failed: " + PQerrorMessage(conn))
PQclear(res)
ok
res = PQexec(conn, "
CREATE TABLE COMPANY (
ID INT PRIMARY KEY NOT NULL,
NAME TEXT NOT NULL,
AGE INT NOT NULL,
ADDRESS CHAR(50),
SALARY REAL );
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Create Table failed: " + PQerrorMessage(conn))
PQclear(res)
ok
PQclear(res)
res = PQexec(conn, "
INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ),
(2, 'Ahmed' , 27, 'Jeddah', 20.00 ),
(3, 'Mohammed', 33, 'Egypt' , 30.00 ),
(4, 'Ibrahim' , 24, 'Egypt ', 40.00 );
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn))
PQclear(res)
ok
PQclear(res)
res = PQexec(conn, "
select * from COMPANY
")
if PQresultStatus(res) != PGRES_TUPLES_OK
fputs(stderr, "Select failed: " + PQerrorMessage(conn))
PQclear(res)
call exit_nicely(conn)
4.7. RingPostgreSQL Extension 49
Ring Documentation, Release 1.9
ok
nFields = PQnfields(res)
for i = 1 to nFields
? PQfname(res, i-1)
next
? copy("*",60)
for i = 1 to PQntuples(res)
for j=1 to nFields
see PQgetvalue(res, i-1, j-1) + " "
next
see nl
next
PQclear(res)
PQfinish(conn)
Output:
id
name
age
address
salary
************************************************************
1 Mahmoud 31 Jeddah 10
2 Ahmed 27 Jeddah 20
3 Mohammed 31 Egypt 30
4 Ibrahim 24 Egypt 40
For more information check the PostgreSQL Chapter in the documentation
4.8 Deploying Web applications in the Cloud
We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku
Demo : http://testring.herokuapp.com/
Project : https://github.com/ring-lang/RingWebAppOnHeroku
Heroku Website : https://www.heroku.com/
4.8. Deploying Web applications in the Cloud 50
Ring Documentation, Release 1.9
For more information check the Deploying Web Applications In The Cloud chapter in the documentation.
4.9 Better RingQt
1. The next classes are added to RingQt
• QDrag
• QMimeData
• QDropEvent
• QDragMoveEvent
• QDragEnterEvent
• QDragLeaveEvent
• QClipboard
• QChildEvent
• QGeoPositionInfo
• QGeoCoordinate
• QGeoAddress
• QGeoAreaMonitorInfo
• QGeoAreaMonitorSource
• QGeoCircle
• QGeoPositionInfoSource
4.9. Better RingQt 51
Ring Documentation, Release 1.9
• QGeoRectangle
• QGeoShape
• QGeoSatelliteInfo
• QGeoSatelliteInfoSource
• QNmeaPositionInfoSource
• QAxWidget
• QTextStream
• QPrinterInfo
• QPrintPreviewWidget
• QPrintPreviewDialog
• QPageSetupDialog
• QAbstractPrintDialog
• QPrintDialog
2. The next classes are updated
• QAllEvents Class : New Events (ChildAdded, ChildPolished, ChildRemoved).
• QPainter Class : Updated Methods (drawConvexPloygon, drawPoints, drawPolyline) Accept Ring list of points.
• QVariant : More versions that accept different parameters when creating the object.
• QAxBase : Different versions for the dynamicCall() and querySubObject() methods.
The next example for using the QPrintPreviewDialog class
Example:
load "guilib.ring"
new qApp {
win1 = new qwidget() {
setwindowtitle("Printer Preview Dialog")
setgeometry(100,100,800,880)
printer1 = new qPrinter(0)
show()
oPreview = new qPrintPreviewDialog(printer1) {
setParent(win1)
move(10,10)
setPaintrequestedevent("printPreview()")
exec()
}
}
exec()
}
func printPreview
printer1 {
painter = new qpainter() {
begin(printer1)
myfont = new qfont("Times",50,-1,0)
setfont(myfont)
drawtext(100,100,"Test - Page (1)")
printer1.newpage()
4.9. Better RingQt 52
Ring Documentation, Release 1.9
drawtext(100,100,"Test - Page (2)")
printer1.newpage()
myfont2 = new qfont("Times",14,-1,0)
setfont(myfont2)
for x = 1 to 30
drawtext(100,100+(20*x),"Number : " + x)
next
endpaint()
}
}
Screen Shot:
4.9. Better RingQt 53
Ring Documentation, Release 1.9
4.10 Better Memory Management
The Ring API is updated to include RING_API_RETMANAGEDCPOINTER()
Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a man-
aged pointer to Ring. This pointer can be controlled by the Ring VM using reference counting.
4.10. Better Memory Management 54
Ring Documentation, Release 1.9
This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt.
Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER()
based on need.
Syntax:
RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType,
void (* pFreeFunc)(void *,void *))
For more information about RING_API_RETMANAGEDCPOINTER()
See the “Extension using the C/C++ languages” Chapter in the documentation
4.11 Better Code Generator for Extensions
1. The code generator for extensions is updated to support the <loadfile> command
<loadfile> filename.cf
This is useful to separate the extension configuraition file to many files
Example:
The file : qt_module_network.cf in the RingQt Extension
<comment>
Module (network)
</comment>
<loadfile> qabstractsocket.cf
<loadfile> qnetworkproxy.cf
<loadfile> qtcpsocket.cf
<loadfile> qtcpserver.cf
<loadfile> qhostaddress.cf
<loadfile> qhostinfo.cf
<loadfile> qnetworkrequest.cf
<loadfile> qnetworkaccessmanager.cf
<loadfile> qnetworkreply.cf
2. The code generator support the <managed> option when defining classes.
Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer.
So the Garabage Collector will manage these C pointers.
Example
<class>
name: QFont
para: QString, int, int, bool
managed
</class>
4.12 More Improvements
1. Ring Compiler - The Rule (Factor -> ‘-‘ Expr) changed to (Factor -> ‘-‘ Factor).
2. Ring VM - Better Error Message.
4.11. Better Code Generator for Extensions 55
Ring Documentation, Release 1.9
3. Better code for IsNULL() function - updated to check pointers too.
4. Better code for ringvm_evalinscope() function - used by the Trace Library.
5. Better code for Space() function.
6. Better code for Hex() and Dec() functions.
7. Better code for Download() function.
8. Better code for SubStr() function.
9. Better code for the Unsigned() function.
10. Better code for Chdir() function.
11. Better code for Tempname() function.
12. Better code for HashTable - New Key (using ring_strdup() instead of strdup() function).
13. New Function : SRandom() - Initialize random number generator.
14. New Function : IsPointer().
15. IsList() will not return True for C Pointers, we have now the IsPointer() function.
16. The ? Operator is updated to respect the ringvm_see() function.
17. Scripts to run Ring tests on Linux and macOS (Not only Windows).
18. RingAllegro is Updated from Allegro 5.1 to Allegro 5.2.
19. Shader Functions are added to RingAllegro.
20. Joystick Functions are added to RingAllegro.
21. Network functions are added to RingLibSDL.
22. Game Engine for 2D Games - Text Class - Check the font object before usage.
23. Game Engine for 2D Games - Automatic support for Joystick.
24. RingLibCurl is updated to automatically use CURLOPT_COPYPOSTFIELDS when needed.
25. Ring Notepad - Find Previous Feature.
26. Ring Notepad - Default Style.
27. Ring Notepad - Support using Non-English language (Like Arabic) in file names.
28. Form Designer - Nice Aliginment for Toolbox Icons.
29. Form Desginer - QAllEvents Class - Mouse Double Click Event.
30. Find in Files - Replace and Replace All options.
31. Qt Class Converter is updated for better conversion results.
32. More samples are added to ring/samples/other folder.
33. Code Refactoring for Ring Notepad, RingQt, Game Engine for 2D Games.
34. Better Documentation - Many images are updated to reflect the current state of Ring Environment.
35. Better Documentation - More chapters are added to the documentation.
4.12. More Improvements 56
CHAPTER
FIVE
WHAT IS NEW IN RING 1.8?
In this chapter we will learn about the changes and new features in Ring 1.8 release.
5.1 List of changes and new features
Ring 1.8 comes with the next features!
• Better Performance
• Find in files Application
• String2Constant Application
• StopWatch Application
• More 3D Samples
• Compiling on Manjaro Linux
• Using This in the class region as Self
• Default value for object attributes is NULL
• The For Loops uses the local scope
• Merge binary characters
• FoxRing Library
• Better Form Designer
• Better Cards Game
• Better RingQt
• Better Code Generator For Extensions
• Better Ring Compiler and VM
• Notes to extensions creators
5.2 Better Performance
Ring 1.8 is faster than Ring 1.7
The performance gain is between 10% and 100% based on the application.
Check the 3D samples in this release to get an idea about the current performance.
57
Ring Documentation, Release 1.9
For more information check the Performance Tips chapter.
5.3 Find in files Application
Ring 1.8 comes with Find in files application
5.4 String2Constant Application
Ring 1.8 comes with String2Constant application
Using this tool we can convert the source code to be based on constants instead of string literals
Then we can store constants in separate source code files that we can translate to different languages
Where we can have special file for each language, like (English.ring, Arabic.ring and so on)
Using this simple tool, the Form Designer is translated to the Arabic language.
For more information check the Multi-language Applications chapter.
5.3. Find in files Application 58

More Related Content

PDF
The Ring programming language version 1.10 book - Part 10 of 212
PDF
The Ring programming language version 1.7 book - Part 8 of 196
PDF
The Ring programming language version 1.5.3 book - Part 13 of 184
PDF
The Ring programming language version 1.9 book - Part 12 of 210
PDF
The Ring programming language version 1.8 book - Part 10 of 202
PDF
The Ring programming language version 1.10 book - Part 13 of 212
PDF
The Ring programming language version 1.5.4 book - Part 8 of 185
PDF
The Ring programming language version 1.5.1 book - Part 7 of 180
The Ring programming language version 1.10 book - Part 10 of 212
The Ring programming language version 1.7 book - Part 8 of 196
The Ring programming language version 1.5.3 book - Part 13 of 184
The Ring programming language version 1.9 book - Part 12 of 210
The Ring programming language version 1.8 book - Part 10 of 202
The Ring programming language version 1.10 book - Part 13 of 212
The Ring programming language version 1.5.4 book - Part 8 of 185
The Ring programming language version 1.5.1 book - Part 7 of 180

What's hot (20)

PDF
The Ring programming language version 1.5.3 book - Part 8 of 184
PDF
The Ring programming language version 1.6 book - Part 80 of 189
PDF
The Ring programming language version 1.10 book - Part 208 of 212
PDF
The Ring programming language version 1.9 book - Part 17 of 210
PDF
The Ring programming language version 1.6 book - Part 79 of 189
PDF
«Продакшн в Kotlin DSL» Сергей Рыбалкин
PDF
The Ring programming language version 1.8 book - Part 15 of 202
PDF
PDF
The Ring programming language version 1.9 book - Part 81 of 210
PDF
The Ring programming language version 1.9 book - Part 111 of 210
PDF
The Ring programming language version 1.9 book - Part 48 of 210
PDF
The Ring programming language version 1.7 book - Part 75 of 196
PDF
The Ring programming language version 1.8 book - Part 77 of 202
PDF
The Ring programming language version 1.6 book - Part 7 of 189
PPTX
Taking Jenkins Pipeline to the Extreme
PDF
The Ring programming language version 1.9 book - Part 16 of 210
PDF
Job Queue in Golang
PDF
The Ring programming language version 1.7 book - Part 82 of 196
PDF
The Ring programming language version 1.8 book - Part 72 of 202
PDF
The Ring programming language version 1.5.2 book - Part 12 of 181
The Ring programming language version 1.5.3 book - Part 8 of 184
The Ring programming language version 1.6 book - Part 80 of 189
The Ring programming language version 1.10 book - Part 208 of 212
The Ring programming language version 1.9 book - Part 17 of 210
The Ring programming language version 1.6 book - Part 79 of 189
«Продакшн в Kotlin DSL» Сергей Рыбалкин
The Ring programming language version 1.8 book - Part 15 of 202
The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 111 of 210
The Ring programming language version 1.9 book - Part 48 of 210
The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.6 book - Part 7 of 189
Taking Jenkins Pipeline to the Extreme
The Ring programming language version 1.9 book - Part 16 of 210
Job Queue in Golang
The Ring programming language version 1.7 book - Part 82 of 196
The Ring programming language version 1.8 book - Part 72 of 202
The Ring programming language version 1.5.2 book - Part 12 of 181
Ad

Similar to The Ring programming language version 1.9 book - Part 9 of 210 (20)

PDF
The Ring programming language version 1.8 book - Part 17 of 202
PDF
The Ring programming language version 1.9 book - Part 19 of 210
PDF
The Ring programming language version 1.4 book - Part 3 of 30
PDF
The Ring programming language version 1.8 book - Part 201 of 202
PDF
The Ring programming language version 1.10 book - Part 18 of 212
PDF
The Ring programming language version 1.9 book - Part 206 of 210
PDF
The Ring programming language version 1.10 book - Part 21 of 212
PDF
The Ring programming language version 1.5.1 book - Part 12 of 180
PDF
The Ring programming language version 1.5.4 book - Part 14 of 185
PDF
The Ring programming language version 1.10 book - Part 211 of 212
PDF
The Ring programming language version 1.5.3 book - Part 189 of 194
PDF
The Ring programming language version 1.7 book - Part 92 of 196
PDF
A New Chapter of Data Processing with CDK
PDF
The Ring programming language version 1.8 book - Part 95 of 202
PDF
The Ring programming language version 1.9 book - Part 20 of 210
PDF
The Ring programming language version 1.5.4 book - Part 177 of 185
PDF
The Ring programming language version 1.10 book - Part 212 of 212
PDF
The Ring programming language version 1.5.3 book - Part 92 of 184
PDF
The Ring programming language version 1.9 book - Part 13 of 210
PDF
The Ring programming language version 1.5.2 book - Part 13 of 181
The Ring programming language version 1.8 book - Part 17 of 202
The Ring programming language version 1.9 book - Part 19 of 210
The Ring programming language version 1.4 book - Part 3 of 30
The Ring programming language version 1.8 book - Part 201 of 202
The Ring programming language version 1.10 book - Part 18 of 212
The Ring programming language version 1.9 book - Part 206 of 210
The Ring programming language version 1.10 book - Part 21 of 212
The Ring programming language version 1.5.1 book - Part 12 of 180
The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.10 book - Part 211 of 212
The Ring programming language version 1.5.3 book - Part 189 of 194
The Ring programming language version 1.7 book - Part 92 of 196
A New Chapter of Data Processing with CDK
The Ring programming language version 1.8 book - Part 95 of 202
The Ring programming language version 1.9 book - Part 20 of 210
The Ring programming language version 1.5.4 book - Part 177 of 185
The Ring programming language version 1.10 book - Part 212 of 212
The Ring programming language version 1.5.3 book - Part 92 of 184
The Ring programming language version 1.9 book - Part 13 of 210
The Ring programming language version 1.5.2 book - Part 13 of 181
Ad

More from Mahmoud Samir Fayed (20)

PDF
The Ring programming language version 1.10 book - Part 210 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
PDF
The Ring programming language version 1.10 book - Part 191 of 212
PDF
The Ring programming language version 1.10 book - Part 190 of 212
PDF
The Ring programming language version 1.10 book - Part 189 of 212
The Ring programming language version 1.10 book - Part 210 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
The Ring programming language version 1.10 book - Part 191 of 212
The Ring programming language version 1.10 book - Part 190 of 212
The Ring programming language version 1.10 book - Part 189 of 212

Recently uploaded (20)

PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PPTX
history of c programming in notes for students .pptx
PDF
How Creative Agencies Leverage Project Management Software.pdf
PPTX
Odoo POS Development Services by CandidRoot Solutions
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPTX
Introduction to Artificial Intelligence
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PDF
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
System and Network Administration Chapter 2
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Essential Infomation Tech presentation.pptx
PDF
PTS Company Brochure 2025 (1).pdf.......
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Navsoft: AI-Powered Business Solutions & Custom Software Development
history of c programming in notes for students .pptx
How Creative Agencies Leverage Project Management Software.pdf
Odoo POS Development Services by CandidRoot Solutions
Design an Analysis of Algorithms II-SECS-1021-03
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
Introduction to Artificial Intelligence
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
Internet Downloader Manager (IDM) Crack 6.42 Build 41
Claude Code: Everyone is a 10x Developer - A Comprehensive AI-Powered CLI Tool
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
System and Network Administration Chapter 2
How to Choose the Right IT Partner for Your Business in Malaysia
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Essential Infomation Tech presentation.pptx
PTS Company Brochure 2025 (1).pdf.......

The Ring programming language version 1.9 book - Part 9 of 210

  • 1. Ring Documentation, Release 1.9 conn = PQconnectdb(conninfo) if (PQstatus(conn) != CONNECTION_OK) fputs(stderr, "Connection to database failed: "+PQerrorMessage(conn)) call exit_nicely(conn) ok res = PQexec(conn, " DROP DATABASE mahdb; ") if PQresultStatus(res) != PGRES_TUPLES_OK fputs(stderr, "Remove failed: " + PQerrorMessage(conn)) PQclear(res) ok PQclear(res) res = PQexec(conn, "CREATE DATABASE mahdb;") if PQresultStatus(res) != PGRES_TUPLES_OK fputs(stderr, "Create database failed: " + PQerrorMessage(conn)) PQclear(res) ok res = PQexec(conn, " CREATE TABLE COMPANY ( ID INT PRIMARY KEY NOT NULL, NAME TEXT NOT NULL, AGE INT NOT NULL, ADDRESS CHAR(50), SALARY REAL ); ") if PQresultStatus(res) != PGRES_TUPLES_OK fputs(stderr, "Create Table failed: " + PQerrorMessage(conn)) PQclear(res) ok PQclear(res) res = PQexec(conn, " INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) VALUES (1, 'Mahmoud' , 31, 'Jeddah', 10.00 ), (2, 'Ahmed' , 27, 'Jeddah', 20.00 ), (3, 'Mohammed', 33, 'Egypt' , 30.00 ), (4, 'Ibrahim' , 24, 'Egypt ', 40.00 ); ") if PQresultStatus(res) != PGRES_TUPLES_OK fputs(stderr, "Insert Table failed: " + PQerrorMessage(conn)) PQclear(res) ok PQclear(res) res = PQexec(conn, " select * from COMPANY ") if PQresultStatus(res) != PGRES_TUPLES_OK fputs(stderr, "Select failed: " + PQerrorMessage(conn)) PQclear(res) call exit_nicely(conn) 4.7. RingPostgreSQL Extension 49
  • 2. Ring Documentation, Release 1.9 ok nFields = PQnfields(res) for i = 1 to nFields ? PQfname(res, i-1) next ? copy("*",60) for i = 1 to PQntuples(res) for j=1 to nFields see PQgetvalue(res, i-1, j-1) + " " next see nl next PQclear(res) PQfinish(conn) Output: id name age address salary ************************************************************ 1 Mahmoud 31 Jeddah 10 2 Ahmed 27 Jeddah 20 3 Mohammed 31 Egypt 30 4 Ibrahim 24 Egypt 40 For more information check the PostgreSQL Chapter in the documentation 4.8 Deploying Web applications in the Cloud We created a new project and tutorial to explain how to deploy Ring web applications in the Cloud using Heroku Demo : http://testring.herokuapp.com/ Project : https://github.com/ring-lang/RingWebAppOnHeroku Heroku Website : https://www.heroku.com/ 4.8. Deploying Web applications in the Cloud 50
  • 3. Ring Documentation, Release 1.9 For more information check the Deploying Web Applications In The Cloud chapter in the documentation. 4.9 Better RingQt 1. The next classes are added to RingQt • QDrag • QMimeData • QDropEvent • QDragMoveEvent • QDragEnterEvent • QDragLeaveEvent • QClipboard • QChildEvent • QGeoPositionInfo • QGeoCoordinate • QGeoAddress • QGeoAreaMonitorInfo • QGeoAreaMonitorSource • QGeoCircle • QGeoPositionInfoSource 4.9. Better RingQt 51
  • 4. Ring Documentation, Release 1.9 • QGeoRectangle • QGeoShape • QGeoSatelliteInfo • QGeoSatelliteInfoSource • QNmeaPositionInfoSource • QAxWidget • QTextStream • QPrinterInfo • QPrintPreviewWidget • QPrintPreviewDialog • QPageSetupDialog • QAbstractPrintDialog • QPrintDialog 2. The next classes are updated • QAllEvents Class : New Events (ChildAdded, ChildPolished, ChildRemoved). • QPainter Class : Updated Methods (drawConvexPloygon, drawPoints, drawPolyline) Accept Ring list of points. • QVariant : More versions that accept different parameters when creating the object. • QAxBase : Different versions for the dynamicCall() and querySubObject() methods. The next example for using the QPrintPreviewDialog class Example: load "guilib.ring" new qApp { win1 = new qwidget() { setwindowtitle("Printer Preview Dialog") setgeometry(100,100,800,880) printer1 = new qPrinter(0) show() oPreview = new qPrintPreviewDialog(printer1) { setParent(win1) move(10,10) setPaintrequestedevent("printPreview()") exec() } } exec() } func printPreview printer1 { painter = new qpainter() { begin(printer1) myfont = new qfont("Times",50,-1,0) setfont(myfont) drawtext(100,100,"Test - Page (1)") printer1.newpage() 4.9. Better RingQt 52
  • 5. Ring Documentation, Release 1.9 drawtext(100,100,"Test - Page (2)") printer1.newpage() myfont2 = new qfont("Times",14,-1,0) setfont(myfont2) for x = 1 to 30 drawtext(100,100+(20*x),"Number : " + x) next endpaint() } } Screen Shot: 4.9. Better RingQt 53
  • 6. Ring Documentation, Release 1.9 4.10 Better Memory Management The Ring API is updated to include RING_API_RETMANAGEDCPOINTER() Using RING_API_RETMANAGEDCPOINTER() the Ring extensions written in C/C++ languages can return a man- aged pointer to Ring. This pointer can be controlled by the Ring VM using reference counting. 4.10. Better Memory Management 54
  • 7. Ring Documentation, Release 1.9 This is important to avoid the need to write code that free the unmanaged resources like QPixMap objects in RingQt. Also the Code Generator for extensions is updated to automatically use RING_API_RETMANAGEDCPOINTER() based on need. Syntax: RING_API_RETMANAGEDCPOINTER(void *pValue,const char *cPointerType, void (* pFreeFunc)(void *,void *)) For more information about RING_API_RETMANAGEDCPOINTER() See the “Extension using the C/C++ languages” Chapter in the documentation 4.11 Better Code Generator for Extensions 1. The code generator for extensions is updated to support the <loadfile> command <loadfile> filename.cf This is useful to separate the extension configuraition file to many files Example: The file : qt_module_network.cf in the RingQt Extension <comment> Module (network) </comment> <loadfile> qabstractsocket.cf <loadfile> qnetworkproxy.cf <loadfile> qtcpsocket.cf <loadfile> qtcpserver.cf <loadfile> qhostaddress.cf <loadfile> qhostinfo.cf <loadfile> qnetworkrequest.cf <loadfile> qnetworkaccessmanager.cf <loadfile> qnetworkreply.cf 2. The code generator support the <managed> option when defining classes. Using this option, the generator will use RING_API_RETMANAGEDCPOINTER() to return the C pointer. So the Garabage Collector will manage these C pointers. Example <class> name: QFont para: QString, int, int, bool managed </class> 4.12 More Improvements 1. Ring Compiler - The Rule (Factor -> ‘-‘ Expr) changed to (Factor -> ‘-‘ Factor). 2. Ring VM - Better Error Message. 4.11. Better Code Generator for Extensions 55
  • 8. Ring Documentation, Release 1.9 3. Better code for IsNULL() function - updated to check pointers too. 4. Better code for ringvm_evalinscope() function - used by the Trace Library. 5. Better code for Space() function. 6. Better code for Hex() and Dec() functions. 7. Better code for Download() function. 8. Better code for SubStr() function. 9. Better code for the Unsigned() function. 10. Better code for Chdir() function. 11. Better code for Tempname() function. 12. Better code for HashTable - New Key (using ring_strdup() instead of strdup() function). 13. New Function : SRandom() - Initialize random number generator. 14. New Function : IsPointer(). 15. IsList() will not return True for C Pointers, we have now the IsPointer() function. 16. The ? Operator is updated to respect the ringvm_see() function. 17. Scripts to run Ring tests on Linux and macOS (Not only Windows). 18. RingAllegro is Updated from Allegro 5.1 to Allegro 5.2. 19. Shader Functions are added to RingAllegro. 20. Joystick Functions are added to RingAllegro. 21. Network functions are added to RingLibSDL. 22. Game Engine for 2D Games - Text Class - Check the font object before usage. 23. Game Engine for 2D Games - Automatic support for Joystick. 24. RingLibCurl is updated to automatically use CURLOPT_COPYPOSTFIELDS when needed. 25. Ring Notepad - Find Previous Feature. 26. Ring Notepad - Default Style. 27. Ring Notepad - Support using Non-English language (Like Arabic) in file names. 28. Form Designer - Nice Aliginment for Toolbox Icons. 29. Form Desginer - QAllEvents Class - Mouse Double Click Event. 30. Find in Files - Replace and Replace All options. 31. Qt Class Converter is updated for better conversion results. 32. More samples are added to ring/samples/other folder. 33. Code Refactoring for Ring Notepad, RingQt, Game Engine for 2D Games. 34. Better Documentation - Many images are updated to reflect the current state of Ring Environment. 35. Better Documentation - More chapters are added to the documentation. 4.12. More Improvements 56
  • 9. CHAPTER FIVE WHAT IS NEW IN RING 1.8? In this chapter we will learn about the changes and new features in Ring 1.8 release. 5.1 List of changes and new features Ring 1.8 comes with the next features! • Better Performance • Find in files Application • String2Constant Application • StopWatch Application • More 3D Samples • Compiling on Manjaro Linux • Using This in the class region as Self • Default value for object attributes is NULL • The For Loops uses the local scope • Merge binary characters • FoxRing Library • Better Form Designer • Better Cards Game • Better RingQt • Better Code Generator For Extensions • Better Ring Compiler and VM • Notes to extensions creators 5.2 Better Performance Ring 1.8 is faster than Ring 1.7 The performance gain is between 10% and 100% based on the application. Check the 3D samples in this release to get an idea about the current performance. 57
  • 10. Ring Documentation, Release 1.9 For more information check the Performance Tips chapter. 5.3 Find in files Application Ring 1.8 comes with Find in files application 5.4 String2Constant Application Ring 1.8 comes with String2Constant application Using this tool we can convert the source code to be based on constants instead of string literals Then we can store constants in separate source code files that we can translate to different languages Where we can have special file for each language, like (English.ring, Arabic.ring and so on) Using this simple tool, the Form Designer is translated to the Arabic language. For more information check the Multi-language Applications chapter. 5.3. Find in files Application 58