SlideShare a Scribd company logo
Ring Documentation, Release 1.5.3
71.16 Threads Support
Next, another part of the configutaiton file, it’s important because we can learn from it how to add threads to our Ring
applications by using a threads library.
The idea is using ring_vm_mutexfunctions() and ring_vm_runcodefromthread() to execute Ring code.
<comment>
Threads
</comment>
<code>
void *al_func_thread(ALLEGRO_THREAD *thread, void *pPointer)
{
List *pList;
VM *pVM;
const char *cStr;
pList = (List *) pPointer ;
pVM = (VM *) ring_list_getpointer(pList,2);
cStr = ring_list_getstring(pList,1);
ring_vm_runcodefromthread(pVM,cStr);
ring_list_delete(pList);
return NULL;
}
RING_FUNC(ring_al_create_thread)
{
ALLEGRO_THREAD *pThread;
List *pList;
if ( RING_API_PARACOUNT != 1 ) {
RING_API_ERROR(RING_API_MISS1PARA);
return ;
}
if ( ! RING_API_ISSTRING(1) ) {
RING_API_ERROR(RING_API_BADPARATYPE);
return ;
}
pList = ring_list_new(0);
ring_list_addstring(pList,RING_API_GETSTRING(1));
ring_list_addpointer(pList,pPointer);
ring_vm_mutexfunctions((VM *) pPointer,al_create_mutex,
al_lock_mutex,al_unlock_mutex,al_destroy_mutex);
pThread = al_create_thread(al_func_thread, pList);
al_start_thread(pThread);
RING_API_RETCPOINTER(pThread,"ALLEGRO_THREAD");
}
RING_FUNC(ring_al_run_detached_thread)
{
List *pList;
if ( RING_API_PARACOUNT != 1 ) {
RING_API_ERROR(RING_API_MISS1PARA);
return ;
}
if ( ! RING_API_ISSTRING(1) ) {
71.16. Threads Support 785
Ring Documentation, Release 1.5.3
RING_API_ERROR(RING_API_BADPARATYPE);
return ;
}
pList = ring_list_new(0);
ring_list_addstring(pList,RING_API_GETSTRING(1));
ring_list_addpointer(pList,pPointer);
ring_vm_mutexfunctions((VM *) pPointer,al_create_mutex,
al_lock_mutex,al_unlock_mutex,al_destroy_mutex);
al_run_detached_thread(al_func_thread, pList);
}
</code>
<register>
ALLEGRO_THREAD *al_create_thread(void)
void al_run_detached_thread(void)
</register>
void al_start_thread(ALLEGRO_THREAD *thread)
void al_join_thread(ALLEGRO_THREAD *thread, void **ret_value)
void al_set_thread_should_stop(ALLEGRO_THREAD *thread)
bool al_get_thread_should_stop(ALLEGRO_THREAD *thread)
void al_destroy_thread(ALLEGRO_THREAD *thread)
ALLEGRO_MUTEX *al_create_mutex(void)
ALLEGRO_MUTEX *al_create_mutex_recursive(void)
void al_lock_mutex(ALLEGRO_MUTEX *mutex)
void al_unlock_mutex(ALLEGRO_MUTEX *mutex)
void al_destroy_mutex(ALLEGRO_MUTEX *mutex)
ALLEGRO_COND *al_create_cond(void)
void al_destroy_cond(ALLEGRO_COND *cond)
void al_wait_cond(ALLEGRO_COND *cond, ALLEGRO_MUTEX *mutex)
71.17 Code Generator Rules for Wrapping C++ Classes
• We can define classes between <class> and </class>
• Between <class> and <class> we set attributes like “name, nonew, para, parent, codename, passvmpointer and
abstract”
• we set the attributes using the style attributename:value or attributename only if no values are required
• The “name” attribute determine the class name in C++ code and this name will be the default name in the Ring
code
• The nonew instruction means that we don’t need new/delete methods
• The parent attribute determine the parent class name
• The codename attribute determine another class name in C++ code
• The passvmpoint instruction means passing the Ring VM pointer to the class constructor when we create new
objects, this happens when we set the codename attribute to a class the we will define and this class need the
Virtual Machine pointer (for example to use it to execute Ring code from C++ code).
• The abstract instruction means that no new method is required for this class “no objects will be created”.
• Using <nodllstartup> we can avoid #include “ring.h”, We need this to write our startup code.
• Using <libinitfunc> we can change the function name that register the library functions
• Using <ignorecpointertype> we can ignore pointer type check
71.17. Code Generator Rules for Wrapping C++ Classes 786
Ring Documentation, Release 1.5.3
• Using the aStringTypes list when can defined new types that treated like const char *
• Using the aBeforeReturn list when can define code that is inserted after the variable name when we return that
variable from a function
• Using the aNewMethodName list we can define another method name to be used in Ring code when we call
the C++ method. this feature is required because some C++ method may be identical to Ring Keywords like
“load”,”next”,”end” and “done”.
• in method prototype - when we use @ in the method name, we mean that we have the same method with different
parameters (As in C++)
71.18 Using configuration file that wrap C++ Library
To run the code generator to generate code for using C++ library in the Ring application, we can do that as we did
with using C libraries but here we will generate .cpp file instead of *.c file. Also we will determine another file to be
generated (.ring). This file will contains classes in Ring code that wraps C++ functions for using C++ classes and
objects.
ring parsec.ring qt.cf ring_qt.cpp ring_qt.ring
71.19 Configuration file for the Qt Framework
The next configuration file is used to wrap many Qt classes The configuration file is around 3500 lines and generate
C++ code around 56000 lines and generate also Ring code around 9000 lines.
<nodllstartup>
<libinitfunc> ring_qt_start
<ignorecpointertype>
<code>
extern "C" {
#include "ring.h"
}
#include "ring_qt.h"
#include "gpushbutton.h"
#include "gaction.h"
#include "glineedit.h"
#include "gtextedit.h"
#include "glistwidget.h"
#include "gtreeview.h"
#include "gtreewidget.h"
#include "gcombobox.h"
#include "gtabwidget.h"
#include "gtablewidget.h"
#include "gprogressbar.h"
#include "gspinbox.h"
#include "gslider.h"
#include "gdial.h"
#include "gwebview.h"
#include "gcheckbox.h"
71.18. Using configuration file that wrap C++ Library 787
Ring Documentation, Release 1.5.3
#include "gradiobutton.h"
#include "gbuttongroup.h"
#include "gvideowidget.h"
#include "gtimer.h"
#include "gtcpserver.h"
#include "giodevice.h"
#include "gabstractsocket.h"
#include "gtcpsocket.h"
#include "gcolordialog.h"
#include "gallevents.h"
#include <QApplication>
#include <QObject>
#include <QWidget>
#include <QLabel>
#include <QPixmap>
#include <QIcon>
#include <QSize>
#include <QPushButton>
#include <QMainWindow>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLineEdit>
#include <QTextEdit>
#include <QListWidget>
#include <QTreeView>
#include <QDir>
#include <QFileSystemModel>
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QComboBox>
#include <QVariant>
#include <QMenuBar>
#include <QMenu>
#include <QToolBar>
#include <QMainWindow>
#include <QStatusBar>
#include <QDockWidget>
#include <QTabWidget>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QSizePolicy>
#include <QFrame>
#include <QAbstractScrollArea>
#include <QAbstractItemView>
#include <QProgressBar>
#include <QSpinBox>
#include <QSlider>
#include <QAbstractSlider>
#include <QDateEdit>
#include <QDateTimeEdit>
#include <QAbstractSpinBox>
#include <QDial>
#include <QWebView>
#include <QUrl>
#include <QCheckBox>
#include <QRadioButton>
#include <QButtonGroup>
#include <QMediaPlayer>
71.19. Configuration file for the Qt Framework 788
Ring Documentation, Release 1.5.3
#include <QMediaPlaylist>
#include <QVideoWidget>
#include <QPrinter>
#include <QAction>
#include <QEvent>
#include <QMessageBox>
#include <QTimer>
#include <QFileDialog>
#include <QPainter>
#include <QPicture>
#include <QPen>
#include <QColor>
#include <QPrinter>
#include <QFont>
#include <QWebSettings>
#include <QBrush>
#include <QByteArray>
#include <QIODevice>
#include <QAbstractSocket>
#include <QTcpSocket>
#include <QTcpServer>
#include <QNetworkProxy>
#include <QHostAddress>
#include <QHostInfo>
#include <QList>
#include <QFileInfo>
#include <QDirModel>
#include <QModelIndex>
#include <QFontDialog>
#include <QDialog>
#include <QTextCursor>
#include <QTextBlock>
#include <QTextDocumentFragment>
#include <QColorDialog>
#include <QHeaderView>
#include <QStringList>
#include <QKeySequence>
#include <QLCDNumber>
#include <QInputDialog>
#include <QDesktopWidget>
#include <QRect>
#include <QTextDocument>
extern "C" {
#define RING_DLL __declspec(dllexport)
RING_DLL void ringlib_init(RingState *pRingState)
{
new QApplication(pRingState->argc,pRingState->argv);
ring_qt_start(pRingState) ;
}
}
</code>
71.19. Configuration file for the Qt Framework 789
Ring Documentation, Release 1.5.3
<runcode>
aStringTypes + "QString"
aBeforeReturn + ["QString",".toStdString().c_str()"]
aNewMethodName + ["QWebView","load","loadpage"]
aNewMethodName + ["QMediaPlaylist","load","loadfile"]
aNewMethodName + ["QMediaPlaylist","next","movenext"]
aNewMethodName + ["QPainter","end","endpaint"]
aNewMethodName + ["QPicture","load","loadfile"]
aNewMethodName + ["QLineEdit","end","endtext"]
aNewMethodName + ["QDialog","done","donedialog"]
aNewMethodName + ["QTextDocument","end","enddoc"]
aNewMethodName + ["QTextBlock","next","nextblock"]
</runcode>
<class>
name: qApp
nonew
</class>
<register>
void exec(void)
void quit(void)
void processEvents(void)
</register>
<code>
RING_FUNC(ring_qApp_quit)
{
qApp->quit();
}
RING_FUNC(ring_qApp_exec)
{
qApp->exec();
}
RING_FUNC(ring_qApp_processEvents)
{
qApp->processEvents();
}
</code>
<class>
name: QObject
para: void
</class>
bool blockSignals(bool block)
QObjectList children(void)
void dumpObjectInfo(void)
void dumpObjectTree(void)
bool inherits(const char *className)
void installEventFilter(QObject *filterObj)
bool isWidgetType(void)
void killTimer(int id)
void moveToThread(QThread *targetThread)
71.19. Configuration file for the Qt Framework 790
Ring Documentation, Release 1.5.3
QString objectName(void)
QObject *parent(void)
QVariant property(const char *name)
void removeEventFilter(QObject *obj)
void setObjectName(QString)
void setParent(QObject *parent)
bool setProperty(const char *name, QVariant)
bool signalsBlocked(void)
int startTimer(int interval)
QThread *thread(void)
void deleteLater(void)
<class>
name: QWidget
para: void
parent: QObject
</class>
bool acceptDrops(void)
QString accessibleDescription(void)
QString accessibleName(void)
void activateWindow(void)
void addAction(QAction *action)
void adjustSize(void)
bool autoFillBackground(void)
int backgroundRole(void)
QSize baseSize(void)
QWidget *childAt(int x, int y)
QRect childrenRect(void)
QRegion childrenRegion(void)
void clearFocus(void)
void clearMask(void)
QMargins contentsMargins(void)
QRect contentsRect(void)
int contextMenuPolicy(void)
QCursor cursor(void)
int effectiveWinId(void)
void ensurePolished(void)
int focusPolicy(void)
QWidget *focusProxy(void)
QWidget *focusWidget(void)
QFont font(void)
QFontInfo fontInfo(void)
QFontMetrics fontMetrics(void)
int foregroundRole(void)
QRect frameGeometry(void)
QSize frameSize(void)
QRect geometry(void)
void getContentsMargins(int *left, int *top, int *right, int *bottom)
void grabGesture(int gesture, int flags)
void grabKeyboard(void)
void grabMouse(void)
int grabShortcut(QKeySequence , int context)
QGraphicsEffect *graphicsEffect(void)
QGraphicsProxyWidget *graphicsProxyWidget(void)
bool hasFocus(void)
bool hasMouseTracking(void)
int height(void)
71.19. Configuration file for the Qt Framework 791
Ring Documentation, Release 1.5.3
int heightForWidth(int w)
int inputMethodHints(void)
QVariant inputMethodQuery(int query)
void insertAction(QAction *before, QAction *action)
bool isActiveWindow(void)
bool isAncestorOf(QWidget *child)
bool isEnabled(void)
bool isEnabledTo(QWidget *ancestor)
bool isFullScreen(void)
bool isHidden(void)
bool isMaximized(void)
bool isMinimized(void)
bool isModal(void)
bool isVisible(void)
bool isVisibleTo(QWidget *ancestor)
bool isWindow(void)
bool isWindowModified(void)
QLayout *layout(void)
int layoutDirection(void)
QLocale locale(void)
QPoint mapFrom(QWidget *parent, QPoint)
QPoint mapFromGlobal(QPoint)
QPoint mapFromParent(QPoint)
QPoint mapTo(QWidget *parent, QPoint)
QPoint mapToGlobal(QPoint pos)
QPoint mapToParent(QPoint pos)
QRegion mask(void)
int maximumHeight(void)
QSize maximumSize(void)
int maximumWidth(void)
int minimumHeight(void)
QSize minimumSize(void)
int minimumWidth(void)
void move(int x, int y)
QWidget *nativeParentWidget(void)
QWidget *nextInFocusChain(void)
QRect normalGeometry(void)
void overrideWindowFlags(int flags)
QPalette palette(void)
QWidget *parentWidget(void)
QPoint pos(void)
QWidget *previousInFocusChain(void)
QRect rect(void)
void releaseKeyboard(void)
void releaseMouse(void)
void releaseShortcut(int id)
void removeAction(QAction *action)
void render(QPaintDevice *target, QPoint,QRegion, int)
void repaint(int x, int y, int w, int h)
void resize(int w, int h)
bool restoreGeometry(QByteArray)
QByteArray saveGeometry(void)
void scroll(int dx, int dy)
void setAcceptDrops(bool on)
void setAccessibleDescription(QString)
void setAccessibleName(QString)
void setAttribute(int attribute, bool on)
void setAutoFillBackground(bool enabled)
71.19. Configuration file for the Qt Framework 792
Ring Documentation, Release 1.5.3
void setBackgroundRole(int role)
void setBaseSize(int basew, int baseh)
void setContentsMargins(int left, int top, int right, int bottom)
void setContextMenuPolicy(int policy)
void setCursor(QCursor)
void setFixedHeight(int h)
void setFixedSize(int w, int h)
void setFixedWidth(int w)
void setFocus(int reason)
void setFocusPolicy(int policy)
void setFocusProxy(QWidget *w)
void setFont(QFont)
void setForegroundRole(int role)
void setGeometry(int x, int y, int w, int h)
void setGraphicsEffect(QGraphicsEffect *effect)
void setInputMethodHints(int hints)
void setLayout(QLayout *layout)
void setLayoutDirection(int direction)
void setLocale(QLocale)
void setMask(QBitmap)
void setMaximumHeight(int maxh)
void setMaximumSize(int maxw, int maxh)
void setMaximumWidth(int maxw)
void setMinimumHeight(int minh)
void setMinimumSize(int minw, int minh)
void setMinimumWidth(int minw)
void setMouseTracking(bool enable)
void setPalette(QPalette)
void setParent(QWidget *parent)
void setShortcutAutoRepeat(int id, bool enable)
void setShortcutEnabled(int id, bool enable)
void setSizeIncrement(int w, int h)
void setSizePolicy(int horizontal, int vertical)
void setStatusTip(QString)
void setStyle(QStyle *style)
void setToolTip(QString)
void setUpdatesEnabled(bool enable)
void setWhatsThis(QString)
void setWindowFilePath(QString)
void setWindowFlags(int type)
void setWindowIcon(QIcon)
void setWindowIconText(QString)
void setWindowModality(int windowModality)
void setWindowOpacity(double level)
void setWindowRole(QString)
void setWindowState(int windowState)
QSize size(void)
QSize sizeIncrement(void)
QSizePolicy sizePolicy(void)
void stackUnder(QWidget *w)
QString statusTip(void)
QStyle *style(void)
QString styleSheet(void)
bool testAttribute(int attribute)
QString toolTip(void)
bool underMouse(void)
void ungrabGesture(int gesture)
void unsetCursor(void)
71.19. Configuration file for the Qt Framework 793
Ring Documentation, Release 1.5.3
void unsetLayoutDirection(void)
void unsetLocale(void)
void update(int x, int y, int w, int h)
void updateGeometry(void)
bool updatesEnabled(void)
QRegion visibleRegion(void)
QString whatsThis(void)
int width(void)
int winId(void)
QWidget *window(void)
QString windowFilePath(void)
int windowFlags(void)
QIcon windowIcon(void)
QString windowIconText(void)
int windowModality(void)
double windowOpacity(void)
QString windowRole(void)
int windowState(void)
QString windowTitle(void)
int windowType(void)
int x(void)
int y(void)
bool close(void)
void hide(void)
void lower(void)
void raise(void)
void setDisabled(bool disable)
void setEnabled(bool)
void setHidden(bool hidden)
void setStyleSheet(QString)
void setWindowModified(bool)
void setWindowTitle(QString)
void show(void)
void showFullScreen(void)
void showMaximized(void)
void showMinimized(void)
void showNormal(void)
QWidget *find(int id)
QWidget *keyboardGrabber(void)
QWidget *mouseGrabber(void)
void setTabOrder(QWidget *first, QWidget *second)
<class>
name: QLabel
para: QWidget *
parent: QWidget
</class>
int alignment(void)
QWidget *buddy(void)
bool hasScaledContents(void)
bool hasSelectedText(void)
int indent(void)
int margin(void)
QMovie *movie(void)
bool openExternalLinks(void)
QPicture *picture(void)
QPixmap *pixmap(void)
71.19. Configuration file for the Qt Framework 794
Ad

Recommended

The Ring programming language version 1.7 book - Part 88 of 196
The Ring programming language version 1.7 book - Part 88 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 82 of 185
The Ring programming language version 1.5.4 book - Part 82 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.2 book - Part 78 of 181
The Ring programming language version 1.5.2 book - Part 78 of 181
Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 91 of 202
The Ring programming language version 1.8 book - Part 91 of 202
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 81 of 185
The Ring programming language version 1.5.4 book - Part 81 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 94 of 210
The Ring programming language version 1.9 book - Part 94 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.8 book - Part 90 of 202
The Ring programming language version 1.8 book - Part 90 of 202
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 86 of 196
The Ring programming language version 1.7 book - Part 86 of 196
Mahmoud Samir Fayed
 
Operator overloading2
Operator overloading2
zindadili
 
The Ring programming language version 1.5.3 book - Part 189 of 194
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 8 of 196
The Ring programming language version 1.7 book - Part 8 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 10 of 212
The Ring programming language version 1.10 book - Part 10 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 8 of 185
The Ring programming language version 1.5.4 book - Part 8 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 8 of 184
The Ring programming language version 1.5.3 book - Part 8 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 7 of 180
The Ring programming language version 1.5.1 book - Part 7 of 180
Mahmoud Samir Fayed
 
Writing native bindings to node.js in C++
Writing native bindings to node.js in C++
nsm.nikhil
 
Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08
Platonov Sergey
 
Recursion to iteration automation.
Recursion to iteration automation.
Russell Childs
 
Node.js/io.js Native C++ Addons
Node.js/io.js Native C++ Addons
Chris Barber
 
Swift Sequences & Collections
Swift Sequences & Collections
CocoaHeads France
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Sergey Platonov
 
The Ring programming language version 1.5.3 book - Part 13 of 184
The Ring programming language version 1.5.3 book - Part 13 of 184
Mahmoud Samir Fayed
 
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
JinTaek Seo
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
PVS-Studio
 
20100712-OTcl Command -- Getting Started
20100712-OTcl Command -- Getting Started
Teerawat Issariyakul
 
The Ring programming language version 1.5.4 book - Part 77 of 185
The Ring programming language version 1.5.4 book - Part 77 of 185
Mahmoud Samir Fayed
 
Map kit light
Map kit light
CocoaHeads France
 
Node.js extensions in C++
Node.js extensions in C++
Kenneth Geisshirt
 
The Ring programming language version 1.5.2 book - Part 79 of 181
The Ring programming language version 1.5.2 book - Part 79 of 181
Mahmoud Samir Fayed
 
The Ring programming language version 1.5 book - Part 14 of 31
The Ring programming language version 1.5 book - Part 14 of 31
Mahmoud Samir Fayed
 

More Related Content

What's hot (20)

Operator overloading2
Operator overloading2
zindadili
 
The Ring programming language version 1.5.3 book - Part 189 of 194
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 8 of 196
The Ring programming language version 1.7 book - Part 8 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 10 of 212
The Ring programming language version 1.10 book - Part 10 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 8 of 185
The Ring programming language version 1.5.4 book - Part 8 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 8 of 184
The Ring programming language version 1.5.3 book - Part 8 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 7 of 180
The Ring programming language version 1.5.1 book - Part 7 of 180
Mahmoud Samir Fayed
 
Writing native bindings to node.js in C++
Writing native bindings to node.js in C++
nsm.nikhil
 
Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08
Platonov Sergey
 
Recursion to iteration automation.
Recursion to iteration automation.
Russell Childs
 
Node.js/io.js Native C++ Addons
Node.js/io.js Native C++ Addons
Chris Barber
 
Swift Sequences & Collections
Swift Sequences & Collections
CocoaHeads France
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Sergey Platonov
 
The Ring programming language version 1.5.3 book - Part 13 of 184
The Ring programming language version 1.5.3 book - Part 13 of 184
Mahmoud Samir Fayed
 
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
JinTaek Seo
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
PVS-Studio
 
20100712-OTcl Command -- Getting Started
20100712-OTcl Command -- Getting Started
Teerawat Issariyakul
 
The Ring programming language version 1.5.4 book - Part 77 of 185
The Ring programming language version 1.5.4 book - Part 77 of 185
Mahmoud Samir Fayed
 
Map kit light
Map kit light
CocoaHeads France
 
Node.js extensions in C++
Node.js extensions in C++
Kenneth Geisshirt
 
Operator overloading2
Operator overloading2
zindadili
 
The Ring programming language version 1.5.3 book - Part 189 of 194
The Ring programming language version 1.5.3 book - Part 189 of 194
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 8 of 196
The Ring programming language version 1.7 book - Part 8 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 10 of 212
The Ring programming language version 1.10 book - Part 10 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 8 of 185
The Ring programming language version 1.5.4 book - Part 8 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 8 of 184
The Ring programming language version 1.5.3 book - Part 8 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 7 of 180
The Ring programming language version 1.5.1 book - Part 7 of 180
Mahmoud Samir Fayed
 
Writing native bindings to node.js in C++
Writing native bindings to node.js in C++
nsm.nikhil
 
Ranges calendar-novosibirsk-2015-08
Ranges calendar-novosibirsk-2015-08
Platonov Sergey
 
Recursion to iteration automation.
Recursion to iteration automation.
Russell Childs
 
Node.js/io.js Native C++ Addons
Node.js/io.js Native C++ Addons
Chris Barber
 
Swift Sequences & Collections
Swift Sequences & Collections
CocoaHeads France
 
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Александр Гранин, Функциональная 'Жизнь': параллельные клеточные автоматы и к...
Sergey Platonov
 
The Ring programming language version 1.5.3 book - Part 13 of 184
The Ring programming language version 1.5.3 book - Part 13 of 184
Mahmoud Samir Fayed
 
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
JinTaek Seo
 
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
Analysis of Haiku Operating System (BeOS Family) by PVS-Studio. Part 2
PVS-Studio
 
20100712-OTcl Command -- Getting Started
20100712-OTcl Command -- Getting Started
Teerawat Issariyakul
 
The Ring programming language version 1.5.4 book - Part 77 of 185
The Ring programming language version 1.5.4 book - Part 77 of 185
Mahmoud Samir Fayed
 

Similar to The Ring programming language version 1.5.3 book - Part 92 of 184 (20)

The Ring programming language version 1.5.2 book - Part 79 of 181
The Ring programming language version 1.5.2 book - Part 79 of 181
Mahmoud Samir Fayed
 
The Ring programming language version 1.5 book - Part 14 of 31
The Ring programming language version 1.5 book - Part 14 of 31
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 72 of 212
The Ring programming language version 1.10 book - Part 72 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 97 of 212
The Ring programming language version 1.10 book - Part 97 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 53 of 88
The Ring programming language version 1.3 book - Part 53 of 88
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 9 of 210
The Ring programming language version 1.9 book - Part 9 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.2 book - Part 59 of 84
The Ring programming language version 1.2 book - Part 59 of 84
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 78 of 180
The Ring programming language version 1.5.1 book - Part 78 of 180
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 81 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 80 of 185
The Ring programming language version 1.5.4 book - Part 80 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.4 book - Part 19 of 30
The Ring programming language version 1.4 book - Part 19 of 30
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 92 of 196
The Ring programming language version 1.7 book - Part 92 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 12 of 180
The Ring programming language version 1.5.1 book - Part 12 of 180
Mahmoud Samir Fayed
 
The Ring programming language version 1.4.1 book - Part 3 of 31
The Ring programming language version 1.4.1 book - Part 3 of 31
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 93 of 210
The Ring programming language version 1.9 book - Part 93 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 30 of 88
The Ring programming language version 1.3 book - Part 30 of 88
Mahmoud Samir Fayed
 
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
eugeniadean34240
 
The Ring programming language version 1.6 book - Part 85 of 189
The Ring programming language version 1.6 book - Part 85 of 189
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.2 book - Part 79 of 181
The Ring programming language version 1.5.2 book - Part 79 of 181
Mahmoud Samir Fayed
 
The Ring programming language version 1.5 book - Part 14 of 31
The Ring programming language version 1.5 book - Part 14 of 31
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 87 of 196
The Ring programming language version 1.7 book - Part 87 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.3 book - Part 91 of 184
The Ring programming language version 1.5.3 book - Part 91 of 184
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 72 of 212
The Ring programming language version 1.10 book - Part 72 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.10 book - Part 97 of 212
The Ring programming language version 1.10 book - Part 97 of 212
Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 53 of 88
The Ring programming language version 1.3 book - Part 53 of 88
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 9 of 210
The Ring programming language version 1.9 book - Part 9 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.2 book - Part 59 of 84
The Ring programming language version 1.2 book - Part 59 of 84
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 78 of 180
The Ring programming language version 1.5.1 book - Part 78 of 180
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 81 of 210
The Ring programming language version 1.9 book - Part 81 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.4 book - Part 80 of 185
The Ring programming language version 1.5.4 book - Part 80 of 185
Mahmoud Samir Fayed
 
The Ring programming language version 1.4 book - Part 19 of 30
The Ring programming language version 1.4 book - Part 19 of 30
Mahmoud Samir Fayed
 
The Ring programming language version 1.7 book - Part 92 of 196
The Ring programming language version 1.7 book - Part 92 of 196
Mahmoud Samir Fayed
 
The Ring programming language version 1.5.1 book - Part 12 of 180
The Ring programming language version 1.5.1 book - Part 12 of 180
Mahmoud Samir Fayed
 
The Ring programming language version 1.4.1 book - Part 3 of 31
The Ring programming language version 1.4.1 book - Part 3 of 31
Mahmoud Samir Fayed
 
The Ring programming language version 1.9 book - Part 93 of 210
The Ring programming language version 1.9 book - Part 93 of 210
Mahmoud Samir Fayed
 
The Ring programming language version 1.3 book - Part 30 of 88
The Ring programming language version 1.3 book - Part 30 of 88
Mahmoud Samir Fayed
 
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
20145-5SumII_CSC407_assign1.htmlCSC 407 Computer Systems II.docx
eugeniadean34240
 
The Ring programming language version 1.6 book - Part 85 of 189
The Ring programming language version 1.6 book - Part 85 of 189
Mahmoud Samir Fayed
 
Ad

More from Mahmoud Samir Fayed (20)

The Ring programming language version 1.10 book - Part 212 of 212
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
The Ring programming language version 1.10 book - Part 192 of 212
Mahmoud Samir Fayed
 
Ad

Recently uploaded (20)

10 Key Challenges for AI within the EU Data Protection Framework.pdf
10 Key Challenges for AI within the EU Data Protection Framework.pdf
Priyanka Aash
 
Lessons Learned from Developing Secure AI Workflows.pdf
Lessons Learned from Developing Secure AI Workflows.pdf
Priyanka Aash
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
The Future of Technology: 2025-2125 by Saikat Basu.pdf
The Future of Technology: 2025-2125 by Saikat Basu.pdf
Saikat Basu
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Safe Software
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
janeliewang985
 
MuleSoft for AgentForce : Topic Center and API Catalog
MuleSoft for AgentForce : Topic Center and API Catalog
shyamraj55
 
From Manual to Auto Searching- FME in the Driver's Seat
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PyCon SG 25 - Firecracker Made Easy with Python.pdf
PyCon SG 25 - Firecracker Made Easy with Python.pdf
Muhammad Yuga Nugraha
 
10 Key Challenges for AI within the EU Data Protection Framework.pdf
10 Key Challenges for AI within the EU Data Protection Framework.pdf
Priyanka Aash
 
Lessons Learned from Developing Secure AI Workflows.pdf
Lessons Learned from Developing Secure AI Workflows.pdf
Priyanka Aash
 
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
A Constitutional Quagmire - Ethical Minefields of AI, Cyber, and Privacy.pdf
Priyanka Aash
 
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Smarter Aviation Data Management: Lessons from Swedavia Airports and Sweco
Safe Software
 
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Cracking the Code - Unveiling Synergies Between Open Source Security and AI.pdf
Priyanka Aash
 
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
EIS-Webinar-Engineering-Retail-Infrastructure-06-16-2025.pdf
Earley Information Science
 
Curietech AI in action - Accelerate MuleSoft development
Curietech AI in action - Accelerate MuleSoft development
shyamraj55
 
Connecting Data and Intelligence: The Role of FME in Machine Learning
Connecting Data and Intelligence: The Role of FME in Machine Learning
Safe Software
 
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC and Open Hackathons Monthly Highlights June 2025
OpenACC
 
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik - Passionate Tech Enthusiast
Raman Bhaumik
 
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Oh, the Possibilities - Balancing Innovation and Risk with Generative AI.pdf
Priyanka Aash
 
The Future of Technology: 2025-2125 by Saikat Basu.pdf
The Future of Technology: 2025-2125 by Saikat Basu.pdf
Saikat Basu
 
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
GenAI Opportunities and Challenges - Where 370 Enterprises Are Focusing Now.pdf
Priyanka Aash
 
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Using the SQLExecutor for Data Quality Management: aka One man's love for the...
Safe Software
 
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Coordinated Disclosure for ML - What's Different and What's the Same.pdf
Priyanka Aash
 
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
Cluster-Based Multi-Objective Metamorphic Test Case Pair Selection for Deep N...
janeliewang985
 
MuleSoft for AgentForce : Topic Center and API Catalog
MuleSoft for AgentForce : Topic Center and API Catalog
shyamraj55
 
From Manual to Auto Searching- FME in the Driver's Seat
From Manual to Auto Searching- FME in the Driver's Seat
Safe Software
 
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
"How to survive Black Friday: preparing e-commerce for a peak season", Yurii ...
Fwdays
 
PyCon SG 25 - Firecracker Made Easy with Python.pdf
PyCon SG 25 - Firecracker Made Easy with Python.pdf
Muhammad Yuga Nugraha
 

The Ring programming language version 1.5.3 book - Part 92 of 184

  • 1. Ring Documentation, Release 1.5.3 71.16 Threads Support Next, another part of the configutaiton file, it’s important because we can learn from it how to add threads to our Ring applications by using a threads library. The idea is using ring_vm_mutexfunctions() and ring_vm_runcodefromthread() to execute Ring code. <comment> Threads </comment> <code> void *al_func_thread(ALLEGRO_THREAD *thread, void *pPointer) { List *pList; VM *pVM; const char *cStr; pList = (List *) pPointer ; pVM = (VM *) ring_list_getpointer(pList,2); cStr = ring_list_getstring(pList,1); ring_vm_runcodefromthread(pVM,cStr); ring_list_delete(pList); return NULL; } RING_FUNC(ring_al_create_thread) { ALLEGRO_THREAD *pThread; List *pList; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( ! RING_API_ISSTRING(1) ) { RING_API_ERROR(RING_API_BADPARATYPE); return ; } pList = ring_list_new(0); ring_list_addstring(pList,RING_API_GETSTRING(1)); ring_list_addpointer(pList,pPointer); ring_vm_mutexfunctions((VM *) pPointer,al_create_mutex, al_lock_mutex,al_unlock_mutex,al_destroy_mutex); pThread = al_create_thread(al_func_thread, pList); al_start_thread(pThread); RING_API_RETCPOINTER(pThread,"ALLEGRO_THREAD"); } RING_FUNC(ring_al_run_detached_thread) { List *pList; if ( RING_API_PARACOUNT != 1 ) { RING_API_ERROR(RING_API_MISS1PARA); return ; } if ( ! RING_API_ISSTRING(1) ) { 71.16. Threads Support 785
  • 2. Ring Documentation, Release 1.5.3 RING_API_ERROR(RING_API_BADPARATYPE); return ; } pList = ring_list_new(0); ring_list_addstring(pList,RING_API_GETSTRING(1)); ring_list_addpointer(pList,pPointer); ring_vm_mutexfunctions((VM *) pPointer,al_create_mutex, al_lock_mutex,al_unlock_mutex,al_destroy_mutex); al_run_detached_thread(al_func_thread, pList); } </code> <register> ALLEGRO_THREAD *al_create_thread(void) void al_run_detached_thread(void) </register> void al_start_thread(ALLEGRO_THREAD *thread) void al_join_thread(ALLEGRO_THREAD *thread, void **ret_value) void al_set_thread_should_stop(ALLEGRO_THREAD *thread) bool al_get_thread_should_stop(ALLEGRO_THREAD *thread) void al_destroy_thread(ALLEGRO_THREAD *thread) ALLEGRO_MUTEX *al_create_mutex(void) ALLEGRO_MUTEX *al_create_mutex_recursive(void) void al_lock_mutex(ALLEGRO_MUTEX *mutex) void al_unlock_mutex(ALLEGRO_MUTEX *mutex) void al_destroy_mutex(ALLEGRO_MUTEX *mutex) ALLEGRO_COND *al_create_cond(void) void al_destroy_cond(ALLEGRO_COND *cond) void al_wait_cond(ALLEGRO_COND *cond, ALLEGRO_MUTEX *mutex) 71.17 Code Generator Rules for Wrapping C++ Classes • We can define classes between <class> and </class> • Between <class> and <class> we set attributes like “name, nonew, para, parent, codename, passvmpointer and abstract” • we set the attributes using the style attributename:value or attributename only if no values are required • The “name” attribute determine the class name in C++ code and this name will be the default name in the Ring code • The nonew instruction means that we don’t need new/delete methods • The parent attribute determine the parent class name • The codename attribute determine another class name in C++ code • The passvmpoint instruction means passing the Ring VM pointer to the class constructor when we create new objects, this happens when we set the codename attribute to a class the we will define and this class need the Virtual Machine pointer (for example to use it to execute Ring code from C++ code). • The abstract instruction means that no new method is required for this class “no objects will be created”. • Using <nodllstartup> we can avoid #include “ring.h”, We need this to write our startup code. • Using <libinitfunc> we can change the function name that register the library functions • Using <ignorecpointertype> we can ignore pointer type check 71.17. Code Generator Rules for Wrapping C++ Classes 786
  • 3. Ring Documentation, Release 1.5.3 • Using the aStringTypes list when can defined new types that treated like const char * • Using the aBeforeReturn list when can define code that is inserted after the variable name when we return that variable from a function • Using the aNewMethodName list we can define another method name to be used in Ring code when we call the C++ method. this feature is required because some C++ method may be identical to Ring Keywords like “load”,”next”,”end” and “done”. • in method prototype - when we use @ in the method name, we mean that we have the same method with different parameters (As in C++) 71.18 Using configuration file that wrap C++ Library To run the code generator to generate code for using C++ library in the Ring application, we can do that as we did with using C libraries but here we will generate .cpp file instead of *.c file. Also we will determine another file to be generated (.ring). This file will contains classes in Ring code that wraps C++ functions for using C++ classes and objects. ring parsec.ring qt.cf ring_qt.cpp ring_qt.ring 71.19 Configuration file for the Qt Framework The next configuration file is used to wrap many Qt classes The configuration file is around 3500 lines and generate C++ code around 56000 lines and generate also Ring code around 9000 lines. <nodllstartup> <libinitfunc> ring_qt_start <ignorecpointertype> <code> extern "C" { #include "ring.h" } #include "ring_qt.h" #include "gpushbutton.h" #include "gaction.h" #include "glineedit.h" #include "gtextedit.h" #include "glistwidget.h" #include "gtreeview.h" #include "gtreewidget.h" #include "gcombobox.h" #include "gtabwidget.h" #include "gtablewidget.h" #include "gprogressbar.h" #include "gspinbox.h" #include "gslider.h" #include "gdial.h" #include "gwebview.h" #include "gcheckbox.h" 71.18. Using configuration file that wrap C++ Library 787
  • 4. Ring Documentation, Release 1.5.3 #include "gradiobutton.h" #include "gbuttongroup.h" #include "gvideowidget.h" #include "gtimer.h" #include "gtcpserver.h" #include "giodevice.h" #include "gabstractsocket.h" #include "gtcpsocket.h" #include "gcolordialog.h" #include "gallevents.h" #include <QApplication> #include <QObject> #include <QWidget> #include <QLabel> #include <QPixmap> #include <QIcon> #include <QSize> #include <QPushButton> #include <QMainWindow> #include <QVBoxLayout> #include <QHBoxLayout> #include <QLineEdit> #include <QTextEdit> #include <QListWidget> #include <QTreeView> #include <QDir> #include <QFileSystemModel> #include <QTreeWidget> #include <QTreeWidgetItem> #include <QComboBox> #include <QVariant> #include <QMenuBar> #include <QMenu> #include <QToolBar> #include <QMainWindow> #include <QStatusBar> #include <QDockWidget> #include <QTabWidget> #include <QTableWidget> #include <QTableWidgetItem> #include <QSizePolicy> #include <QFrame> #include <QAbstractScrollArea> #include <QAbstractItemView> #include <QProgressBar> #include <QSpinBox> #include <QSlider> #include <QAbstractSlider> #include <QDateEdit> #include <QDateTimeEdit> #include <QAbstractSpinBox> #include <QDial> #include <QWebView> #include <QUrl> #include <QCheckBox> #include <QRadioButton> #include <QButtonGroup> #include <QMediaPlayer> 71.19. Configuration file for the Qt Framework 788
  • 5. Ring Documentation, Release 1.5.3 #include <QMediaPlaylist> #include <QVideoWidget> #include <QPrinter> #include <QAction> #include <QEvent> #include <QMessageBox> #include <QTimer> #include <QFileDialog> #include <QPainter> #include <QPicture> #include <QPen> #include <QColor> #include <QPrinter> #include <QFont> #include <QWebSettings> #include <QBrush> #include <QByteArray> #include <QIODevice> #include <QAbstractSocket> #include <QTcpSocket> #include <QTcpServer> #include <QNetworkProxy> #include <QHostAddress> #include <QHostInfo> #include <QList> #include <QFileInfo> #include <QDirModel> #include <QModelIndex> #include <QFontDialog> #include <QDialog> #include <QTextCursor> #include <QTextBlock> #include <QTextDocumentFragment> #include <QColorDialog> #include <QHeaderView> #include <QStringList> #include <QKeySequence> #include <QLCDNumber> #include <QInputDialog> #include <QDesktopWidget> #include <QRect> #include <QTextDocument> extern "C" { #define RING_DLL __declspec(dllexport) RING_DLL void ringlib_init(RingState *pRingState) { new QApplication(pRingState->argc,pRingState->argv); ring_qt_start(pRingState) ; } } </code> 71.19. Configuration file for the Qt Framework 789
  • 6. Ring Documentation, Release 1.5.3 <runcode> aStringTypes + "QString" aBeforeReturn + ["QString",".toStdString().c_str()"] aNewMethodName + ["QWebView","load","loadpage"] aNewMethodName + ["QMediaPlaylist","load","loadfile"] aNewMethodName + ["QMediaPlaylist","next","movenext"] aNewMethodName + ["QPainter","end","endpaint"] aNewMethodName + ["QPicture","load","loadfile"] aNewMethodName + ["QLineEdit","end","endtext"] aNewMethodName + ["QDialog","done","donedialog"] aNewMethodName + ["QTextDocument","end","enddoc"] aNewMethodName + ["QTextBlock","next","nextblock"] </runcode> <class> name: qApp nonew </class> <register> void exec(void) void quit(void) void processEvents(void) </register> <code> RING_FUNC(ring_qApp_quit) { qApp->quit(); } RING_FUNC(ring_qApp_exec) { qApp->exec(); } RING_FUNC(ring_qApp_processEvents) { qApp->processEvents(); } </code> <class> name: QObject para: void </class> bool blockSignals(bool block) QObjectList children(void) void dumpObjectInfo(void) void dumpObjectTree(void) bool inherits(const char *className) void installEventFilter(QObject *filterObj) bool isWidgetType(void) void killTimer(int id) void moveToThread(QThread *targetThread) 71.19. Configuration file for the Qt Framework 790
  • 7. Ring Documentation, Release 1.5.3 QString objectName(void) QObject *parent(void) QVariant property(const char *name) void removeEventFilter(QObject *obj) void setObjectName(QString) void setParent(QObject *parent) bool setProperty(const char *name, QVariant) bool signalsBlocked(void) int startTimer(int interval) QThread *thread(void) void deleteLater(void) <class> name: QWidget para: void parent: QObject </class> bool acceptDrops(void) QString accessibleDescription(void) QString accessibleName(void) void activateWindow(void) void addAction(QAction *action) void adjustSize(void) bool autoFillBackground(void) int backgroundRole(void) QSize baseSize(void) QWidget *childAt(int x, int y) QRect childrenRect(void) QRegion childrenRegion(void) void clearFocus(void) void clearMask(void) QMargins contentsMargins(void) QRect contentsRect(void) int contextMenuPolicy(void) QCursor cursor(void) int effectiveWinId(void) void ensurePolished(void) int focusPolicy(void) QWidget *focusProxy(void) QWidget *focusWidget(void) QFont font(void) QFontInfo fontInfo(void) QFontMetrics fontMetrics(void) int foregroundRole(void) QRect frameGeometry(void) QSize frameSize(void) QRect geometry(void) void getContentsMargins(int *left, int *top, int *right, int *bottom) void grabGesture(int gesture, int flags) void grabKeyboard(void) void grabMouse(void) int grabShortcut(QKeySequence , int context) QGraphicsEffect *graphicsEffect(void) QGraphicsProxyWidget *graphicsProxyWidget(void) bool hasFocus(void) bool hasMouseTracking(void) int height(void) 71.19. Configuration file for the Qt Framework 791
  • 8. Ring Documentation, Release 1.5.3 int heightForWidth(int w) int inputMethodHints(void) QVariant inputMethodQuery(int query) void insertAction(QAction *before, QAction *action) bool isActiveWindow(void) bool isAncestorOf(QWidget *child) bool isEnabled(void) bool isEnabledTo(QWidget *ancestor) bool isFullScreen(void) bool isHidden(void) bool isMaximized(void) bool isMinimized(void) bool isModal(void) bool isVisible(void) bool isVisibleTo(QWidget *ancestor) bool isWindow(void) bool isWindowModified(void) QLayout *layout(void) int layoutDirection(void) QLocale locale(void) QPoint mapFrom(QWidget *parent, QPoint) QPoint mapFromGlobal(QPoint) QPoint mapFromParent(QPoint) QPoint mapTo(QWidget *parent, QPoint) QPoint mapToGlobal(QPoint pos) QPoint mapToParent(QPoint pos) QRegion mask(void) int maximumHeight(void) QSize maximumSize(void) int maximumWidth(void) int minimumHeight(void) QSize minimumSize(void) int minimumWidth(void) void move(int x, int y) QWidget *nativeParentWidget(void) QWidget *nextInFocusChain(void) QRect normalGeometry(void) void overrideWindowFlags(int flags) QPalette palette(void) QWidget *parentWidget(void) QPoint pos(void) QWidget *previousInFocusChain(void) QRect rect(void) void releaseKeyboard(void) void releaseMouse(void) void releaseShortcut(int id) void removeAction(QAction *action) void render(QPaintDevice *target, QPoint,QRegion, int) void repaint(int x, int y, int w, int h) void resize(int w, int h) bool restoreGeometry(QByteArray) QByteArray saveGeometry(void) void scroll(int dx, int dy) void setAcceptDrops(bool on) void setAccessibleDescription(QString) void setAccessibleName(QString) void setAttribute(int attribute, bool on) void setAutoFillBackground(bool enabled) 71.19. Configuration file for the Qt Framework 792
  • 9. Ring Documentation, Release 1.5.3 void setBackgroundRole(int role) void setBaseSize(int basew, int baseh) void setContentsMargins(int left, int top, int right, int bottom) void setContextMenuPolicy(int policy) void setCursor(QCursor) void setFixedHeight(int h) void setFixedSize(int w, int h) void setFixedWidth(int w) void setFocus(int reason) void setFocusPolicy(int policy) void setFocusProxy(QWidget *w) void setFont(QFont) void setForegroundRole(int role) void setGeometry(int x, int y, int w, int h) void setGraphicsEffect(QGraphicsEffect *effect) void setInputMethodHints(int hints) void setLayout(QLayout *layout) void setLayoutDirection(int direction) void setLocale(QLocale) void setMask(QBitmap) void setMaximumHeight(int maxh) void setMaximumSize(int maxw, int maxh) void setMaximumWidth(int maxw) void setMinimumHeight(int minh) void setMinimumSize(int minw, int minh) void setMinimumWidth(int minw) void setMouseTracking(bool enable) void setPalette(QPalette) void setParent(QWidget *parent) void setShortcutAutoRepeat(int id, bool enable) void setShortcutEnabled(int id, bool enable) void setSizeIncrement(int w, int h) void setSizePolicy(int horizontal, int vertical) void setStatusTip(QString) void setStyle(QStyle *style) void setToolTip(QString) void setUpdatesEnabled(bool enable) void setWhatsThis(QString) void setWindowFilePath(QString) void setWindowFlags(int type) void setWindowIcon(QIcon) void setWindowIconText(QString) void setWindowModality(int windowModality) void setWindowOpacity(double level) void setWindowRole(QString) void setWindowState(int windowState) QSize size(void) QSize sizeIncrement(void) QSizePolicy sizePolicy(void) void stackUnder(QWidget *w) QString statusTip(void) QStyle *style(void) QString styleSheet(void) bool testAttribute(int attribute) QString toolTip(void) bool underMouse(void) void ungrabGesture(int gesture) void unsetCursor(void) 71.19. Configuration file for the Qt Framework 793
  • 10. Ring Documentation, Release 1.5.3 void unsetLayoutDirection(void) void unsetLocale(void) void update(int x, int y, int w, int h) void updateGeometry(void) bool updatesEnabled(void) QRegion visibleRegion(void) QString whatsThis(void) int width(void) int winId(void) QWidget *window(void) QString windowFilePath(void) int windowFlags(void) QIcon windowIcon(void) QString windowIconText(void) int windowModality(void) double windowOpacity(void) QString windowRole(void) int windowState(void) QString windowTitle(void) int windowType(void) int x(void) int y(void) bool close(void) void hide(void) void lower(void) void raise(void) void setDisabled(bool disable) void setEnabled(bool) void setHidden(bool hidden) void setStyleSheet(QString) void setWindowModified(bool) void setWindowTitle(QString) void show(void) void showFullScreen(void) void showMaximized(void) void showMinimized(void) void showNormal(void) QWidget *find(int id) QWidget *keyboardGrabber(void) QWidget *mouseGrabber(void) void setTabOrder(QWidget *first, QWidget *second) <class> name: QLabel para: QWidget * parent: QWidget </class> int alignment(void) QWidget *buddy(void) bool hasScaledContents(void) bool hasSelectedText(void) int indent(void) int margin(void) QMovie *movie(void) bool openExternalLinks(void) QPicture *picture(void) QPixmap *pixmap(void) 71.19. Configuration file for the Qt Framework 794