SlideShare a Scribd company logo
Ring Documentation, Release 1.7
see "message from the test function!" + nl
class test
In the previous example we have a function called test() so we can call it directly using test()
In the next example, test() will become a method
See"Hello"
test() # runtime error message
class test
func test # Test() now is a method (not a function)
see "message from the test method!" + nl
The errors comes when you define a method then try calling it directly as a function.
The previous program must be
See"Hello"
new test { test() } # now will call the method
class test
func test # Test() now is a method (not a function)
see "message from the test method!" + nl
76.49 Can Ring work on Windows XP?
Ring can work on Windows XP and load extensions without problems.
Just be sure that the extension can work on Windows XP and your compiler version support that (modern compilers
requires some flags to support XP)
Check this topic https://blogs.msdn.microsoft.com/vcblog/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-
2012/
For example, We added
/link /SUBSYSTEM:CONSOLE,"5.01"
To the batch file to support Windows XP
See : https://github.com/ring-lang/ring/blob/master/src/buildvccomplete.bat
76.50 How to extend RingQt and add more classes?
You have many options
In general you can extend Ring using C or C++ code
Ring from Ring code you can call C Functions or use C++ Classes & Methods
This chapter in the documentation explains this part in the language http://ring-
lang.sourceforge.net/doc/extension.html
For example the next code in .c file can be compiled to a DLL file using the Ring library (.lib)
#include "ring.h"
RING_FUNC(ring_ringlib_dlfunc)
{
76.49. Can Ring work on Windows XP? 882
Ring Documentation, Release 1.7
printf("Message from dlfunc");
}
RING_API void ringlib_init(RingState *pRingState)
{
ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc);
}
Then from Ring you can load the DLL file using LoadLib() function then call the C function that called dlfunc() as
any Ring function.
See "Dynamic DLL" + NL
LoadLib("ringlib.dll")
dlfunc()
Output
Dynamic DLL
Message from dlfunc
When you read the documentation you will know about how to get parameters like (strings, numbers, lists and objects)
And how to return a value (any type) from you function.
From experience, when we support a C library or C++ Library
We discovered that a lot of functions share a lot of code
To save our time, and to quickly generate wrappers for C/C++ Libraries to be used in Ring
We have this code generator
https://github.com/ring-lang/ring/blob/master/extensions/codegen/parsec.ring
The code generator is just a Ring program < 1200 lines of Ring code
The generator take as input a configuration file contains the C/C++ library information
like Functions Prototype, Classes and Methods, Constants, Enum, Structures and members , etc.
Then the generator will generate
*.C File for C libraries (to be able to use the library functions)
*.CPP File for C++ libraries (to be able to use C++ classes and methods)
*.Ring File (to be able to use C++ classes as Ring classes)
*.RH file (Constants)
To understand how the generator work check this extension for the Allegro game programming library
https://github.com/ring-lang/ring/tree/master/extensions/ringallegro
At first we have the configuration file
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf
To write this file, i just used the Allegro documentation + the Ring code generator rules
Then after executing the generator using this batch file
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat
or using this script
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.sh
76.50. How to extend RingQt and add more classes? 883
Ring Documentation, Release 1.7
I get the generated source code file
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/ring_allegro.c
The generated source code file (ring_allegro.c) is around 12,000 Lines of code (12 KLOC)
While the configuration file is less than 1 KLOC
To build the library (create the DLL files)
https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/buildvc.bat
Also you can check this extension for the LibSDL Library
https://github.com/ring-lang/ring/tree/master/extensions/ringsdl
After this know you should know about
1 - Writing the configuration file
2 - Using the Code Generator
3 - Building your library/extension
4 - Using your library/extension from Ring code
Let us move now to you question about Qt
We have RingQt which is just an extension to ring (ringqt.dll)
You don’t need to modify Ring.
1. You just need to modify RingQt
2. Or extend Ring with another extension based on Qt (but the same Qt version)
For the first option see the RingQt extension
https://github.com/ring-lang/ring/tree/master/extensions/ringqt
Configuration file
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/qt.cf
To generate the source code
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.bat
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.sh
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencodeandroid.bat
To build the DLL/so/Dylib files
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildmingw32.bat
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildgcc.sh
https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildclang.sh
Study RingQt
Learn about the options that you have
1. wrapping a Qt class directly
2. Creating a new class then wrapping your new class
76.50. How to extend RingQt and add more classes? 884
Ring Documentation, Release 1.7
For the second option (in the previous two points or in the two points before that)
You will create new classes in C++ code
Then you merge these classes to RingQt or provide special DLL for them (your decision)
If your work is general (will help others) just put it to RingQt.
if your work is special (to specific application) just put it in another extension.
76.51 How to add Combobox and other elements to the cells of a
QTableWidget?
Check the next code
Load "guilib.ring"
New qApp
{
win1 = new qMainWindow() {
setGeometry(100,100,1100,370)
setwindowtitle("Using QTableWidget")
Table1 = new qTableWidget(win1) {
setrowcount(10) setcolumncount(10)
setGeometry(0,0,800,400)
setselectionbehavior(QAbstractItemView_SelectRows)
for x = 1 to 10
for y = 1 to 10
item1 = new qtablewidgetitem("R"+X+"C"+Y)
setitem(x-1,y-1, item1)
next
next
cmb = new QComboBox(Table1) {
alist = ["one","two","three","four","five"]
for x in aList additem(x,0) next
}
setCellWidget(5, 5, cmb)
}
setcentralwidget(table1)
show()
}
exec()
}
76.52 How to perform some manipulations on selected cells in
QTableWidget?
Check the next sample
Load "guilib.ring"
New qApp {
76.51. How to add Combobox and other elements to the cells of a QTableWidget? 885
Ring Documentation, Release 1.7
win1 = new qMainWindow() {
setGeometry(100,100,800,600)
setwindowtitle("Using QTableWidget")
Table1 = new qTableWidget(win1) {
setrowcount(10) setcolumncount(10)
setGeometry(10,10,400,400)
for x = 1 to 10
for y = 1 to 10
item1 = new qtablewidgetitem("10")
setitem(x-1,y-1,item1)
next
next
}
btn1 = new qPushButton(win1) {
setText("Increase")
setGeometry(510,10,100,30)
setClickEvent("pClick()")
}
show()
}
exec()
}
func pClick
for nRow = 0 to Table1.rowcount() - 1
for nCol = 0 to Table1.columncount() - 1
Table1.item(nRow,nCol) {
if isSelected()
setText( "" + ( 10 + text()) )
ok
}
next
next
76.53 Which of 3 coding styles are commonly used or recommended
by the community?
1. Just select any style of them but don’t mix between the different styles in the same project or at least in
the same context (Implementation, Tests, Scripts, etc)
Note: State the rules in the start of each project and follow it.
2. You can create your style (by changing keywords) - The idea is about customization and freedom.
Note: It’s better to change keywords and create new style only for a clear reason like using another natural language
(Arabic, French, etc.)
3. The First style is better (IMHO) for questions, tutorials and small applications/programs (Less than 5,000 LOC)
Example : Ring Book, Most of Ring Samples and Applications.
4. The Third style is better(IMHO) for large applications and mainstream programmers
Example (Form Designer) : https://github.com/ring-lang/ring/tree/master/applications/formdesigner
76.53. Which of 3 coding styles are commonly used or recommended by the community? 886
CHAPTER
SEVENTYSEVEN
LANGUAGE REFERENCE
In this chapter we will learn about
• Language keywords
• Language Functions
• Compiler Errors
• Runtime Errors
• Environment Errors
• Language Grammar
• Virtual Machine (VM) Instructions
77.1 Language Keywords
Keywords Count : 49
• again
• and
• but
• bye
• call
• case
• catch
• changeringkeyword
• changeringoperator
• class
• def
• do
• done
• else
• elseif
• end
887
Ring Documentation, Release 1.7
• exit
• for
• from
• func
• get
• give
• if
• import
• in
• load
• loadsyntax
• loop
• new
• next
• not
• off
• ok
• on
• or
• other
• package
• private
• put
• return
• see
• step
• switch
• to
• try
• while
• endfunc
• endclass
• endpackage
77.1. Language Keywords 888
Ring Documentation, Release 1.7
77.2 Language Functions
Functions Count : 199
len() add() del() sysget() clock() lower()
upper() input() ascii() char() date() time()
filename() getchar() system() random() timelist() adddays()
diffdays() version() clockspersecond() prevfilename() swap() shutdown()
isstring() isnumber() islist() type() isnull() isobject()
hex() dec() number() string() str2hex() hex2str()
str2list() list2str() str2hexcstyle() left() right() trim()
copy() substr() lines() strcmp() eval() raise()
assert() isalnum() isalpha() iscntrl() isdigit() isgraph()
islower() isprint() ispunct() isspace() isupper() isxdigit()
locals() globals() functions() cfunctions() islocal() isglobal()
isfunction() iscfunction() packages() ispackage() classes() isclass()
packageclasses() ispackageclass() classname()
objectid() attributes() methods()
isattribute() ismethod() isprivateattribute()
isprivatemethod() addattribute() addmethod()
getattribute() setattribute() mergemethods()
packagename() ringvm_fileslist() ringvm_calllist()
ringvm_memorylist() ringvm_functionslist()
ringvm_classeslist() ringvm_packageslist()
ringvm_cfunctionslist() ringvm_settrace()
ringvm_tracedata() ringvm_traceevent() ringvm_tracefunc()
ringvm_scopescount() ringvm_evalinscope() ringvm_passerror()
ringvm_hideerrormsg() ringvm_callfunc()
list() find() min() max()
insert() sort() reverse() binarysearch() sin() cos()
tan() asin() acos() atan() atan2() sinh()
cosh() tanh() exp() log() log10() ceil()
floor() fabs() pow() sqrt() unsigned() decimals()
murmur3hash() fopen() fclose() fflush() freopen() tempfile()
tempname() fseek() ftell() rewind() fgetpos() fsetpos()
clearerr() feof() ferror() perror() rename() remove()
fgetc() fgets() fputc() fputs() ungetc() fread()
fwrite() dir() read() write() fexists() int2bytes()
float2bytes() double2bytes() bytes2int()
bytes2float() bytes2double() ismsdos()
iswindows() iswindows64() isunix()
ismacosx() islinux() isfreebsd()
isandroid() windowsnl() currentdir()
exefilename() chdir() exefolder()
loadlib() closelib() callgc() varptr()
intvalue() object2pointer()
pointer2object() nullpointer() space()
ptrcmp() ring_state_init() ring_state_runcode()
ring_state_delete() ring_state_runfile() ring_state_findvar()
ring_state_newvar() ring_state_runobjectfile() ring_state_main()
ring_state_setvar()
77.3 Compiler Errors
• Error (C1) : Error in parameters list, expected identifier
77.2. Language Functions 889
Ring Documentation, Release 1.7
• Error (C2) : Error in class name
• Error (C3) : Unclosed control strucutre, ‘ok’ is missing
• Error (C4) : Unclosed control strucutre, ‘end’ is missing
• Error (C5) : Unclosed control strucutre, next is missing
• Error (C6) : Error in function name
• Error (C7) : Error in list items
• Error (C8) : Parentheses ‘)’ is missing
• Error (C9) : Brackets ‘]’ is missing
• Error (C10) : Error in parent class name
• Error (C11) : Error in expression operator
• Error (C12) : No class definition
• Error (C13) : Error in variable name
• Error (C14) : Try/Catch miss the Catch keyword!
• Error (C15) : Try/Catch miss the Done keyword!
• Error (C16) : Error in Switch statement expression!
• Error (C17) : Switch statement without OFF
• Error (C18) : Missing closing brace for the block opened!
• Error (C19) : Numeric Overflow!
• Error (C20) : Error in package name
• Error (C21) : Unclosed control strucutre, ‘again’ is missing
• Error (C22) : Function redefinition, function is already defined!
• Error (C23) : Using ‘(‘ after number!
• Error (C24) : The parent class name is identical to the subclass name
• Error (C25) : Trying to access the self reference after the object name”
• Error (C26) : Class redefinition, class is already defined!
77.4 Runtime Errors
• Error (R1) : Cann’t divide by zero !
• Error (R2) : Array Access (Index out of range) !
• Error (R3) : Calling Function without definition !
• Error (R4) : Stack Overflow !
• Error (R5) : Can’t access the list item, Object is not list !
• Error (R6) : Variable is required
• Error (R7) : Can’t assign to a string letter more than one character
• Error (R8) : Variable is not a string
77.4. Runtime Errors 890
Ring Documentation, Release 1.7
• Error (R9) : Using exit command outside loops
• Error (R10) : Using exit command with number outside the range
• Error (R11) : error in class name, class not found!
• Error (R12) : error in property name, property not found!
• Error (R13) : Object is required
• Error (R14) : Calling Method without definition !
• Error (R15) : error in parent class name, class not found!
• Error (R16) : Using braces to access unknown object !
• Error (R17) : error, using ‘Super’ without parent class!
• Error (R18) : Numeric Overflow!
• Error (R19) : Calling function with less number of parameters!
• Error (R20) : Calling function with extra number of parameters!
• Error (R21) : Using operator with values of incorrect type
• Error (R22) : Using loop command outside loops
• Error (R23) : Using loop command with number outside the range
• Error (R24) : Using uninitialized variable
• Error (R25) : Error in package name, Package not found!
• Error (R26) : Calling private method from outside the class
• Error (R27) : Using private attribute from outside the class
• Error (R28) : Using bad data type as step value
• Error (R29) : Using bad data type in for loop
• Error (R30) : parent class name is identical to child class name
• Error (R31) : Trying to destory the object using the self reference
• Error (R32) : The CALL command expect a variable contains string!
• Error (R33) : Bad decimals number (correct range >= 0 and <=14) !
• Error (R34) : Variable is required for the assignment operation
• Error (R35) : Can’t create/open the file!
• Error (R36) : The column number is not correct! It’s greater than the number of columns in the list
• Error (R37) : Sorry, The command is not supported in this context
• Error (R38) : Runtime Error in loading the dynamic library!
• Error (R39) : Error occurred creating unique filename.
77.5 Environment Errors
• Error (E1) : Caught SegFault
• Error (E2) : Out of Memory
77.5. Environment Errors 891

More Related Content

PDF
The Ring programming language version 1.10 book - Part 102 of 212
PDF
The Ring programming language version 1.5.3 book - Part 189 of 194
PDF
The Ring programming language version 1.6 book - Part 184 of 189
PDF
The Ring programming language version 1.5.2 book - Part 176 of 181
PDF
The Ring programming language version 1.5.4 book - Part 180 of 185
PDF
The Ring programming language version 1.8 book - Part 95 of 202
PDF
The Ring programming language version 1.4 book - Part 3 of 30
PDF
The Ring programming language version 1.5.4 book - Part 39 of 185
The Ring programming language version 1.10 book - Part 102 of 212
The Ring programming language version 1.5.3 book - Part 189 of 194
The Ring programming language version 1.6 book - Part 184 of 189
The Ring programming language version 1.5.2 book - Part 176 of 181
The Ring programming language version 1.5.4 book - Part 180 of 185
The Ring programming language version 1.8 book - Part 95 of 202
The Ring programming language version 1.4 book - Part 3 of 30
The Ring programming language version 1.5.4 book - Part 39 of 185

What's hot (20)

PPTX
Club of anonimous developers "Refactoring: Legacy code"
PPTX
Дмитрий Нестерук, Паттерны проектирования в XXI веке
PDF
Multithreading done right
PPTX
Concurrency in Programming Languages
PDF
The Ring programming language version 1.2 book - Part 79 of 84
PDF
Антон Бикинеев, Reflection in C++Next
PDF
The Ring programming language version 1.5.2 book - Part 13 of 181
PDF
Metrics ekon 14_2_kleiner
PPTX
SoCal Code Camp 2015: An introduction to Java 8
PDF
Introduction to web programming for java and c# programmers by @drpicox
PDF
Concurrency Concepts in Java
DOC
Final JAVA Practical of BCA SEM-5.
PDF
關於測試,我說的其實是......
PDF
The Ring programming language version 1.8 book - Part 92 of 202
PDF
TensorFlow XLA RPC
PDF
Use of an Oscilloscope - maXbox Starter33
PDF
The Ring programming language version 1.7 book - Part 88 of 196
DOCX
Java practical
PDF
JVM Mechanics
PDF
Adam Sitnik "State of the .NET Performance"
Club of anonimous developers "Refactoring: Legacy code"
Дмитрий Нестерук, Паттерны проектирования в XXI веке
Multithreading done right
Concurrency in Programming Languages
The Ring programming language version 1.2 book - Part 79 of 84
Антон Бикинеев, Reflection in C++Next
The Ring programming language version 1.5.2 book - Part 13 of 181
Metrics ekon 14_2_kleiner
SoCal Code Camp 2015: An introduction to Java 8
Introduction to web programming for java and c# programmers by @drpicox
Concurrency Concepts in Java
Final JAVA Practical of BCA SEM-5.
關於測試,我說的其實是......
The Ring programming language version 1.8 book - Part 92 of 202
TensorFlow XLA RPC
Use of an Oscilloscope - maXbox Starter33
The Ring programming language version 1.7 book - Part 88 of 196
Java practical
JVM Mechanics
Adam Sitnik "State of the .NET Performance"
Ad

Similar to The Ring programming language version 1.7 book - Part 92 of 196 (20)

PDF
The Ring programming language version 1.5.3 book - Part 11 of 184
PDF
The Ring programming language version 1.5.2 book - Part 10 of 181
PDF
The Ring programming language version 1.5.4 book - Part 15 of 185
PDF
The Ring programming language version 1.9 book - Part 17 of 210
PDF
The Ring programming language version 1.8 book - Part 15 of 202
PDF
The Ring programming language version 1.6 book - Part 7 of 189
PDF
The Ring programming language version 1.7 book - Part 7 of 196
PDF
The Ring programming language version 1.5.1 book - Part 10 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 13 of 212
PDF
The Ring programming language version 1.9 book - Part 12 of 210
PDF
The Ring programming language version 1.5.3 book - Part 14 of 184
PDF
The Ring programming language version 1.10 book - Part 21 of 212
PDF
The Ring programming language version 1.3 book - Part 6 of 88
PDF
The Ring programming language version 1.5.1 book - Part 13 of 180
PDF
The Ring programming language version 1.3 book - Part 7 of 88
PDF
The Ring programming language version 1.9 book - Part 20 of 210
PDF
The Ring programming language version 1.8 book - Part 18 of 202
PDF
The Ring programming language version 1.7 book - Part 9 of 196
PDF
The Ring programming language version 1.5.4 book - Part 11 of 185
The Ring programming language version 1.5.3 book - Part 11 of 184
The Ring programming language version 1.5.2 book - Part 10 of 181
The Ring programming language version 1.5.4 book - Part 15 of 185
The Ring programming language version 1.9 book - Part 17 of 210
The Ring programming language version 1.8 book - Part 15 of 202
The Ring programming language version 1.6 book - Part 7 of 189
The Ring programming language version 1.7 book - Part 7 of 196
The Ring programming language version 1.5.1 book - Part 10 of 180
The Ring programming language version 1.5.4 book - Part 14 of 185
The Ring programming language version 1.10 book - Part 13 of 212
The Ring programming language version 1.9 book - Part 12 of 210
The Ring programming language version 1.5.3 book - Part 14 of 184
The Ring programming language version 1.10 book - Part 21 of 212
The Ring programming language version 1.3 book - Part 6 of 88
The Ring programming language version 1.5.1 book - Part 13 of 180
The Ring programming language version 1.3 book - Part 7 of 88
The Ring programming language version 1.9 book - Part 20 of 210
The Ring programming language version 1.8 book - Part 18 of 202
The Ring programming language version 1.7 book - Part 9 of 196
The Ring programming language version 1.5.4 book - Part 11 of 185
Ad

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
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Machine learning based COVID-19 study performance prediction
PDF
Electronic commerce courselecture one. Pdf
PDF
Review of recent advances in non-invasive hemoglobin estimation
PDF
cuic standard and advanced reporting.pdf
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
KodekX | Application Modernization Development
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Dropbox Q2 2025 Financial Results & Investor Presentation
Spectral efficient network and resource selection model in 5G networks
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Encapsulation_ Review paper, used for researhc scholars
Understanding_Digital_Forensics_Presentation.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Machine learning based COVID-19 study performance prediction
Electronic commerce courselecture one. Pdf
Review of recent advances in non-invasive hemoglobin estimation
cuic standard and advanced reporting.pdf
MYSQL Presentation for SQL database connectivity
20250228 LYD VKU AI Blended-Learning.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KodekX | Application Modernization Development
The Rise and Fall of 3GPP – Time for a Sabbatical?

The Ring programming language version 1.7 book - Part 92 of 196

  • 1. Ring Documentation, Release 1.7 see "message from the test function!" + nl class test In the previous example we have a function called test() so we can call it directly using test() In the next example, test() will become a method See"Hello" test() # runtime error message class test func test # Test() now is a method (not a function) see "message from the test method!" + nl The errors comes when you define a method then try calling it directly as a function. The previous program must be See"Hello" new test { test() } # now will call the method class test func test # Test() now is a method (not a function) see "message from the test method!" + nl 76.49 Can Ring work on Windows XP? Ring can work on Windows XP and load extensions without problems. Just be sure that the extension can work on Windows XP and your compiler version support that (modern compilers requires some flags to support XP) Check this topic https://blogs.msdn.microsoft.com/vcblog/2012/10/08/windows-xp-targeting-with-c-in-visual-studio- 2012/ For example, We added /link /SUBSYSTEM:CONSOLE,"5.01" To the batch file to support Windows XP See : https://github.com/ring-lang/ring/blob/master/src/buildvccomplete.bat 76.50 How to extend RingQt and add more classes? You have many options In general you can extend Ring using C or C++ code Ring from Ring code you can call C Functions or use C++ Classes & Methods This chapter in the documentation explains this part in the language http://ring- lang.sourceforge.net/doc/extension.html For example the next code in .c file can be compiled to a DLL file using the Ring library (.lib) #include "ring.h" RING_FUNC(ring_ringlib_dlfunc) { 76.49. Can Ring work on Windows XP? 882
  • 2. Ring Documentation, Release 1.7 printf("Message from dlfunc"); } RING_API void ringlib_init(RingState *pRingState) { ring_vm_funcregister("dlfunc",ring_ringlib_dlfunc); } Then from Ring you can load the DLL file using LoadLib() function then call the C function that called dlfunc() as any Ring function. See "Dynamic DLL" + NL LoadLib("ringlib.dll") dlfunc() Output Dynamic DLL Message from dlfunc When you read the documentation you will know about how to get parameters like (strings, numbers, lists and objects) And how to return a value (any type) from you function. From experience, when we support a C library or C++ Library We discovered that a lot of functions share a lot of code To save our time, and to quickly generate wrappers for C/C++ Libraries to be used in Ring We have this code generator https://github.com/ring-lang/ring/blob/master/extensions/codegen/parsec.ring The code generator is just a Ring program < 1200 lines of Ring code The generator take as input a configuration file contains the C/C++ library information like Functions Prototype, Classes and Methods, Constants, Enum, Structures and members , etc. Then the generator will generate *.C File for C libraries (to be able to use the library functions) *.CPP File for C++ libraries (to be able to use C++ classes and methods) *.Ring File (to be able to use C++ classes as Ring classes) *.RH file (Constants) To understand how the generator work check this extension for the Allegro game programming library https://github.com/ring-lang/ring/tree/master/extensions/ringallegro At first we have the configuration file https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/allegro.cf To write this file, i just used the Allegro documentation + the Ring code generator rules Then after executing the generator using this batch file https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.bat or using this script https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/gencode.sh 76.50. How to extend RingQt and add more classes? 883
  • 3. Ring Documentation, Release 1.7 I get the generated source code file https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/ring_allegro.c The generated source code file (ring_allegro.c) is around 12,000 Lines of code (12 KLOC) While the configuration file is less than 1 KLOC To build the library (create the DLL files) https://github.com/ring-lang/ring/blob/master/extensions/ringallegro/buildvc.bat Also you can check this extension for the LibSDL Library https://github.com/ring-lang/ring/tree/master/extensions/ringsdl After this know you should know about 1 - Writing the configuration file 2 - Using the Code Generator 3 - Building your library/extension 4 - Using your library/extension from Ring code Let us move now to you question about Qt We have RingQt which is just an extension to ring (ringqt.dll) You don’t need to modify Ring. 1. You just need to modify RingQt 2. Or extend Ring with another extension based on Qt (but the same Qt version) For the first option see the RingQt extension https://github.com/ring-lang/ring/tree/master/extensions/ringqt Configuration file https://github.com/ring-lang/ring/blob/master/extensions/ringqt/qt.cf To generate the source code https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.bat https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencode.sh https://github.com/ring-lang/ring/blob/master/extensions/ringqt/gencodeandroid.bat To build the DLL/so/Dylib files https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildmingw32.bat https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildgcc.sh https://github.com/ring-lang/ring/blob/master/extensions/ringqt/buildclang.sh Study RingQt Learn about the options that you have 1. wrapping a Qt class directly 2. Creating a new class then wrapping your new class 76.50. How to extend RingQt and add more classes? 884
  • 4. Ring Documentation, Release 1.7 For the second option (in the previous two points or in the two points before that) You will create new classes in C++ code Then you merge these classes to RingQt or provide special DLL for them (your decision) If your work is general (will help others) just put it to RingQt. if your work is special (to specific application) just put it in another extension. 76.51 How to add Combobox and other elements to the cells of a QTableWidget? Check the next code Load "guilib.ring" New qApp { win1 = new qMainWindow() { setGeometry(100,100,1100,370) setwindowtitle("Using QTableWidget") Table1 = new qTableWidget(win1) { setrowcount(10) setcolumncount(10) setGeometry(0,0,800,400) setselectionbehavior(QAbstractItemView_SelectRows) for x = 1 to 10 for y = 1 to 10 item1 = new qtablewidgetitem("R"+X+"C"+Y) setitem(x-1,y-1, item1) next next cmb = new QComboBox(Table1) { alist = ["one","two","three","four","five"] for x in aList additem(x,0) next } setCellWidget(5, 5, cmb) } setcentralwidget(table1) show() } exec() } 76.52 How to perform some manipulations on selected cells in QTableWidget? Check the next sample Load "guilib.ring" New qApp { 76.51. How to add Combobox and other elements to the cells of a QTableWidget? 885
  • 5. Ring Documentation, Release 1.7 win1 = new qMainWindow() { setGeometry(100,100,800,600) setwindowtitle("Using QTableWidget") Table1 = new qTableWidget(win1) { setrowcount(10) setcolumncount(10) setGeometry(10,10,400,400) for x = 1 to 10 for y = 1 to 10 item1 = new qtablewidgetitem("10") setitem(x-1,y-1,item1) next next } btn1 = new qPushButton(win1) { setText("Increase") setGeometry(510,10,100,30) setClickEvent("pClick()") } show() } exec() } func pClick for nRow = 0 to Table1.rowcount() - 1 for nCol = 0 to Table1.columncount() - 1 Table1.item(nRow,nCol) { if isSelected() setText( "" + ( 10 + text()) ) ok } next next 76.53 Which of 3 coding styles are commonly used or recommended by the community? 1. Just select any style of them but don’t mix between the different styles in the same project or at least in the same context (Implementation, Tests, Scripts, etc) Note: State the rules in the start of each project and follow it. 2. You can create your style (by changing keywords) - The idea is about customization and freedom. Note: It’s better to change keywords and create new style only for a clear reason like using another natural language (Arabic, French, etc.) 3. The First style is better (IMHO) for questions, tutorials and small applications/programs (Less than 5,000 LOC) Example : Ring Book, Most of Ring Samples and Applications. 4. The Third style is better(IMHO) for large applications and mainstream programmers Example (Form Designer) : https://github.com/ring-lang/ring/tree/master/applications/formdesigner 76.53. Which of 3 coding styles are commonly used or recommended by the community? 886
  • 6. CHAPTER SEVENTYSEVEN LANGUAGE REFERENCE In this chapter we will learn about • Language keywords • Language Functions • Compiler Errors • Runtime Errors • Environment Errors • Language Grammar • Virtual Machine (VM) Instructions 77.1 Language Keywords Keywords Count : 49 • again • and • but • bye • call • case • catch • changeringkeyword • changeringoperator • class • def • do • done • else • elseif • end 887
  • 7. Ring Documentation, Release 1.7 • exit • for • from • func • get • give • if • import • in • load • loadsyntax • loop • new • next • not • off • ok • on • or • other • package • private • put • return • see • step • switch • to • try • while • endfunc • endclass • endpackage 77.1. Language Keywords 888
  • 8. Ring Documentation, Release 1.7 77.2 Language Functions Functions Count : 199 len() add() del() sysget() clock() lower() upper() input() ascii() char() date() time() filename() getchar() system() random() timelist() adddays() diffdays() version() clockspersecond() prevfilename() swap() shutdown() isstring() isnumber() islist() type() isnull() isobject() hex() dec() number() string() str2hex() hex2str() str2list() list2str() str2hexcstyle() left() right() trim() copy() substr() lines() strcmp() eval() raise() assert() isalnum() isalpha() iscntrl() isdigit() isgraph() islower() isprint() ispunct() isspace() isupper() isxdigit() locals() globals() functions() cfunctions() islocal() isglobal() isfunction() iscfunction() packages() ispackage() classes() isclass() packageclasses() ispackageclass() classname() objectid() attributes() methods() isattribute() ismethod() isprivateattribute() isprivatemethod() addattribute() addmethod() getattribute() setattribute() mergemethods() packagename() ringvm_fileslist() ringvm_calllist() ringvm_memorylist() ringvm_functionslist() ringvm_classeslist() ringvm_packageslist() ringvm_cfunctionslist() ringvm_settrace() ringvm_tracedata() ringvm_traceevent() ringvm_tracefunc() ringvm_scopescount() ringvm_evalinscope() ringvm_passerror() ringvm_hideerrormsg() ringvm_callfunc() list() find() min() max() insert() sort() reverse() binarysearch() sin() cos() tan() asin() acos() atan() atan2() sinh() cosh() tanh() exp() log() log10() ceil() floor() fabs() pow() sqrt() unsigned() decimals() murmur3hash() fopen() fclose() fflush() freopen() tempfile() tempname() fseek() ftell() rewind() fgetpos() fsetpos() clearerr() feof() ferror() perror() rename() remove() fgetc() fgets() fputc() fputs() ungetc() fread() fwrite() dir() read() write() fexists() int2bytes() float2bytes() double2bytes() bytes2int() bytes2float() bytes2double() ismsdos() iswindows() iswindows64() isunix() ismacosx() islinux() isfreebsd() isandroid() windowsnl() currentdir() exefilename() chdir() exefolder() loadlib() closelib() callgc() varptr() intvalue() object2pointer() pointer2object() nullpointer() space() ptrcmp() ring_state_init() ring_state_runcode() ring_state_delete() ring_state_runfile() ring_state_findvar() ring_state_newvar() ring_state_runobjectfile() ring_state_main() ring_state_setvar() 77.3 Compiler Errors • Error (C1) : Error in parameters list, expected identifier 77.2. Language Functions 889
  • 9. Ring Documentation, Release 1.7 • Error (C2) : Error in class name • Error (C3) : Unclosed control strucutre, ‘ok’ is missing • Error (C4) : Unclosed control strucutre, ‘end’ is missing • Error (C5) : Unclosed control strucutre, next is missing • Error (C6) : Error in function name • Error (C7) : Error in list items • Error (C8) : Parentheses ‘)’ is missing • Error (C9) : Brackets ‘]’ is missing • Error (C10) : Error in parent class name • Error (C11) : Error in expression operator • Error (C12) : No class definition • Error (C13) : Error in variable name • Error (C14) : Try/Catch miss the Catch keyword! • Error (C15) : Try/Catch miss the Done keyword! • Error (C16) : Error in Switch statement expression! • Error (C17) : Switch statement without OFF • Error (C18) : Missing closing brace for the block opened! • Error (C19) : Numeric Overflow! • Error (C20) : Error in package name • Error (C21) : Unclosed control strucutre, ‘again’ is missing • Error (C22) : Function redefinition, function is already defined! • Error (C23) : Using ‘(‘ after number! • Error (C24) : The parent class name is identical to the subclass name • Error (C25) : Trying to access the self reference after the object name” • Error (C26) : Class redefinition, class is already defined! 77.4 Runtime Errors • Error (R1) : Cann’t divide by zero ! • Error (R2) : Array Access (Index out of range) ! • Error (R3) : Calling Function without definition ! • Error (R4) : Stack Overflow ! • Error (R5) : Can’t access the list item, Object is not list ! • Error (R6) : Variable is required • Error (R7) : Can’t assign to a string letter more than one character • Error (R8) : Variable is not a string 77.4. Runtime Errors 890
  • 10. Ring Documentation, Release 1.7 • Error (R9) : Using exit command outside loops • Error (R10) : Using exit command with number outside the range • Error (R11) : error in class name, class not found! • Error (R12) : error in property name, property not found! • Error (R13) : Object is required • Error (R14) : Calling Method without definition ! • Error (R15) : error in parent class name, class not found! • Error (R16) : Using braces to access unknown object ! • Error (R17) : error, using ‘Super’ without parent class! • Error (R18) : Numeric Overflow! • Error (R19) : Calling function with less number of parameters! • Error (R20) : Calling function with extra number of parameters! • Error (R21) : Using operator with values of incorrect type • Error (R22) : Using loop command outside loops • Error (R23) : Using loop command with number outside the range • Error (R24) : Using uninitialized variable • Error (R25) : Error in package name, Package not found! • Error (R26) : Calling private method from outside the class • Error (R27) : Using private attribute from outside the class • Error (R28) : Using bad data type as step value • Error (R29) : Using bad data type in for loop • Error (R30) : parent class name is identical to child class name • Error (R31) : Trying to destory the object using the self reference • Error (R32) : The CALL command expect a variable contains string! • Error (R33) : Bad decimals number (correct range >= 0 and <=14) ! • Error (R34) : Variable is required for the assignment operation • Error (R35) : Can’t create/open the file! • Error (R36) : The column number is not correct! It’s greater than the number of columns in the list • Error (R37) : Sorry, The command is not supported in this context • Error (R38) : Runtime Error in loading the dynamic library! • Error (R39) : Error occurred creating unique filename. 77.5 Environment Errors • Error (E1) : Caught SegFault • Error (E2) : Out of Memory 77.5. Environment Errors 891